【问题标题】:Windows Azure Active Directory Authentication ExceptionWindows Azure Active Directory 身份验证异常
【发布时间】:2016-12-21 16:43:38
【问题描述】:

我正在使用 Windows Azure Active Directory 身份验证。这用于保护在 Azure 中调用 c# Web API 服务的 c# windows 服务。它已经工作了很长一段时间,但现在我开始收到以下异常:

Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware Error: 0 : Authentication failed
System.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10500: Signature validation failed. Unable to resolve SecurityKeyIdentifier: 'SecurityKeyIdentifier
(
    IsReadOnly = False,
    Count = 2,
    Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0x61B44041161C13F9A8B56549287AF02C16DDFFDB),
    Clause[1] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause
)

我不知道这意味着什么或如何解决它:(

更新

在回答关于密钥翻转的评论时,我的网络服务使用以下代码:

private void ConfigureAuth(IAppBuilder app)
{
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationOptions
        {
            TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
            {
                ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
            },
            Tenant = ConfigurationManager.AppSettings["ida:Tenant"]
        });
}

根据该链接,这意味着应该保护它免受此类问题的影响。

包括孩子在内的令牌的开头如下所示:

token: '{"typ":"JWT","alg":"RS256","x5t":"YbRAQRYcE_motWVJKHrwLBbd_9s","kid":"YbRAQRYcE_motWVJKHrwLBbd_9s"}

更新 2

我在 windows 服务中获取令牌的代码:

    internal string GetAuthorizationToken()
    {
        string authority = String.Format(aadInstance, tenant);
        var authContext = new AuthenticationContext(authority);

        var authResult = AcquireToken(authContext);

        return authResult == null ? null : authResult.CreateAuthorizationHeader();
    }

    /// <summary>
    /// Acquires the token.
    /// </summary>
    /// <param name="authContext">The authentication context.</param>
    /// <returns>Authentication Result</returns>
    private AuthenticationResult AcquireToken(AuthenticationContext authContext)
    {
        try
        {

            return authContext.AcquireTokenAsync(apiResourceId, clientId, new UserPasswordCredential(user, pass)).Result;
        }
        catch (Exception)
        {
            return null;
        }
    }

【问题讨论】:

标签: azure asp.net-web-api2 x509certificate azure-active-directory


【解决方案1】:

当应用程序尝试通过 Azure 令牌中的密钥标识查找签名密钥时会发生此异常,但 Azure 上的密钥已经翻转。

请在 Windows 服务中获取新的访问令牌以解决此问题。

【讨论】:

  • 该服务每次联系网络服务时都会获得一个新的密钥。
  • 您介意使用 Fiddler 捕获令牌并通过 here 对其进行解码吗?令牌中kid的值是多少?
  • 添加到我原来的帖子飞,有趣的是,当我使用你链接的那个工具时,它也说无效签名。
  • 这对我来说是客户端生成令牌的问题
  • @DasDave 在 Azure 端找不到密钥。我们可以从这个link 进行检查。你用过 TokenCache 吗?你介意分享一段获取令牌的代码吗?
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多