首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AAD令牌的安全.Net核心3 Web

使用AAD令牌的安全.Net核心3 Web
EN

Stack Overflow用户
提问于 2020-03-08 06:54:28
回答 2查看 788关注 0票数 1

由于一些技术上的限制,我们在用户登录时进行用户名/密码AAD认证。

用户将输入他们的用户名和密码到我们的自定义登录页面,我们的应用程序调用IPublicClientApplication.AcquireTokenByUsernamePassword

我计划使用返回的令牌来调用另一个Web应用程序(也连接到同一个AAD)。在Web应用程序中,我执行了以下操作:

  1. 在启动services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme).AddAzureADBearer(options => Configuration.Bind("AzureAd", options));中添加了以下代码
  2. 在我的appsettings.json文件中包括以下设置 "AzureAd": { "Instance": "https://login.microsoftonline.com/", "ClientId": "<Application ID>", "TenantId": "<Tenant ID>" }
  3. 使用授权保护我的web api

然后,我使用Postman根据返回的令牌构造对Web的调用。我包括了Authorization: Bearer <JWT Token>。Web返回

无记名error="invalid_token",error_description=“签名无效”

我的问题是

  1. Web应用程序能否验证获得的用户名/密码令牌?
  2. 如果令牌可以在Web应用程序中验证,那么我如何做到这一点,因为我得到了上面的错误。
EN

回答 2

Stack Overflow用户

发布于 2020-03-11 03:45:09

我在我的站点上进行了测试,它运行得很好,您可以参考以下步骤:

1.在蔚蓝广告中注册Webapi应用程序。

2.单击Expose an APIAdd a scope,例如webread

3.单击Manifest,将accessTokenAcceptedVersion更改为2.0

4.在visual studio webapi ConfigureServices

代码语言:javascript
复制
services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme).AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, 
options =>
{
    options.Authority += "/v2.0";
    options.TokenValidationParameters.ValidAudiences = new[]
    {
        options.Audience,
        $"api://{options.Audience}"
    };
});

5.在蔚蓝广告中注册客户端应用。

6.单击Authentication,将Default client type设置为Yes

7.单击Api Permission>Add a permission,选择My APIs并选择以前注册的webapi。

8.在visual studio客户端应用程序中,使用webread设置作用域:

代码语言:javascript
复制
string[] scopes = new string[] { "api://1890e822-xxxxxxxxxxxxxxxx/webread" };

希望它能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2020-03-09 05:58:47

从您提供的文档中,您可以使用MSAL在Azure AD V2.0端点中使用资源所有者流获取访问令牌。

文档中,在验证从AzureADV2.0发出的访问令牌时,应该将/v2.0添加到Authority:

代码语言:javascript
复制
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
    // This is a Microsoft identity platform web API.
    options.Authority += "/v2.0";

    // The web API accepts as audiences both the Client ID (options.Audience) and api://{ClientID}.
    options.TokenValidationParameters.ValidAudiences = new []
    {
    options.Audience,
    $"api://{options.Audience}"
    };

});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60585176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档