在 JwtBearerOptions 中为 Azure Active Directory 身份验证指定客户端机密

Posted

技术标签:

【中文标题】在 JwtBearerOptions 中为 Azure Active Directory 身份验证指定客户端机密【英文标题】:Specifying Client secrets in JwtBearerOptions for Azure Active Directory authentication 【发布时间】:2018-04-04 11:33:37 【问题描述】:

如果我在 Visual Studio 2017 中创建一个新的 ASP.NET Core MVC 应用程序,我可以在 AzureAdServiceCollectionExtensions 中添加一行客户端密码:

public void Configure(string name, OpenIdConnectOptions options)

    options.ClientId = _azureOptions.ClientId;
    // Add this line below
    options.ClientSecret = _azureOptions.ClientSecret;
    options.Authority = $"_azureOptions.Instance_azureOptions.TenantId";
    options.UseTokenLifetime = true;
    options.CallbackPath = _azureOptions.CallbackPath;
    options.RequireHttpsMetadata = false;

配置 POCO 已经连接好,可以从配置文件中获取它。

另一方面,在 Web API 项目中,身份验证使用 JWT Tokens,而 Visual Studio 生成的代码则不同:

public void Configure(string name, JwtBearerOptions options)

    options.Audience = _azureOptions.ClientId;
    options.Authority = $"_azureOptions.Instance_azureOptions.TenantId";

我不确定在 JwtBearOptions 中的哪个位置放置客户端密码。

【问题讨论】:

有效吗?你试过了吗? 为什么不在configure方法中? 【参考方案1】:

您实际上并未在选项中指定客户端密码。它在您使用对称密钥签署令牌时使用。

public void Configure(string name, JwtBearerOptions options)

    options.Audience = _azureOptions.ClientId;
    options.Authority = $"_azureOptions.Instance_azureOptions.TenantId";
    var secretKey = "mysupersecret_secretkey!123";
    var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey));
    options.TokenValidationParameters.IssuerSigningKey = signingKey;

查看这些链接:

http://www.blinkingcaret.com/2017/09/06/secure-web-api-in-asp-net-core/ https://stormpath.com/blog/token-authentication-asp-net-core

【讨论】:

【参考方案2】:

OIDC 处理程序允许您指定客户端密码,因为如果您愿意,它可以自行获取访问令牌。

JWT 处理程序不提供此功能。它的工作是验证 JSON Web Tokens 并且什么也不做。

如果您想获得一个委托访问令牌以作为用户调用其他一些 API,您需要自己通过 ADAL/MSAL 获得访问令牌。

您可以为此使用OnTokenValidated 回调:

services.AddAuthentication()
    .AddJwtBearer(o =>
    
        o.Events = new JwtBearerEvents()
        
            OnTokenValidated = async context =>
            
            
        ;
    );

【讨论】:

以上是关于在 JwtBearerOptions 中为 Azure Active Directory 身份验证指定客户端机密的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Web 应用程序中为 Web API 启用 CORS

idea生成实体类azu

jwt token 过期时间(asp.net core)

向 ASP.NET Core 的 JWT 令牌添加自定义验证?

如何在本地环境中自动启动 Azure Function?

Azure DevOps、YAML 发布管道? [关闭]