【问题标题】:Specifying Client secrets in JwtBearerOptions for Azure Active Directory authentication在 JwtBearerOptions 中为 Azure Active Directory 身份验证指定客户端机密
【发布时间】: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方法中?

标签: asp.net-core jwt azure-active-directory openid-connect


【解决方案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;
}

查看这些链接:

【讨论】:

    【解决方案2】:

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

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

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

    您可以为此使用OnTokenValidated 回调:

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

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多