1

如何将新 JWT 处理程序库 (System.IdentityModel.Tokens.Jwt) 的 1.0.0 版集成到 ASP.NET MVC 4 应用程序中,以处理来自 ACS 的 Azure JWT 令牌?

当我尝试运行我的应用程序时收到以下错误:

[SecurityTokenValidationException: Jwt10329: 无法验证签名,Configuration.IssuerTokenResolver.ResolveToken 返回 null。jwt.Header.SigningKeyIdentifier: 'SecurityKeyIdentifier (IsReadOnly = False, Count = 2, Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX), Clause[1] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause) '.] System.IdentityModel.Tokens .JwtSecurityTokenHandler.ValidateSignature(JwtSecurityToken jwt) +1275
System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateToken(JwtSecurityToken jwt) +113
System.IdentityModel.Tokens.JwtSecurityTokenHandler.ValidateToken(SecurityToken token) +339
System.IdentityModel.Tokens.SecurityTokenHandlerCollection.ValidateToken(SecurityToken token) +73
System.IdentityModel.Services.TokenReceiver.AuthenticateToken(SecurityToken token, Boolean ensureBearerToken, String endpointUri) +120
System.IdentityModel.Services.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequestBase request) + 493
System.IdentityModel.Services.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +364
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&同步完成)+69

我的 web.config 配置如下:

<system.identityModel>

    <identityConfiguration>
      <audienceUris>
        <add value="http://127.0.0.1:81/" />
      </audienceUris>

      <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <trustedIssuers>
                  <add thumbprint="PRIVATEKEY"
                     name="https://CUSTOM.accesscontrol.windows.net/" />
        </trustedIssuers>
      </issuerNameRegistry>

      <securityTokenHandlers>
        <add type="System.IdentityModel.Tokens.JwtSecurityTokenHandler, System.IdentityModel.Tokens.Jwt" />
        <securityTokenHandlerConfiguration>
          <certificateValidation certificateValidationMode="PeerTrust" />
        </securityTokenHandlerConfiguration>
        <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </securityTokenHandlers>

    </identityConfiguration>

  </system.identityModel>

  <system.identityModel.services>
    <federationConfiguration>
      <cookieHandler requireSsl="false" />
      <wsFederation passiveRedirectEnabled="false" issuer="https://staging.accesscontrol.windows.net/v2/wsfederation" realm="http://127.0.0.1:81/" requireHttps="false" />
    </federationConfiguration>

  </system.identityModel.services>

我已将 Azure ACS 设置为返回 JWT 令牌并在 web.config 中设置了正确的安全缩略图,但我很困惑为什么会发生此错误。有什么见解吗?

4

2 回答 2

1

我遇到了同样的问题。使用 JWT,Web 应用程序需要了解有关颁发者的信息才能验证令牌。JWT 中缺少 X509 证书,需要在证书存储中可用。Vittorio B.在“在 WIF 应用程序中使用 JWT 处理程序”部分中描述了该问题以及解决该问题的步骤。

于 2013-06-12T19:21:05.587 回答
0

我能够通过创建一个新的 x.509 证书并将其作为我的主要 X.509 证书上传到 Azure ACS,然后将其安装在我的本地计算机的凭据存储中来解决此问题。

我按照以下说明创建证书:

http://blogs.msdn.com/b/cclayton/archive/2012/03/21/windows-azure-and-x509-certificates.aspx

我使用 makecert 命令生成证书(确保添加您自己的命名空间)

makecert.exe -r -pe -a sha1 -n "CN=YOURNAMESPACE.accesscontrol.windows.net" -ss My -sr CurrentUser -len 2048 -sky exchange -sy 24

然后,我使用 certmgr.mcs 将证书导出为 PFX 和 CER 文件。

我将 PFX 文件导入到我的 Azure ACS(使用管理门户)。完成后,我复制了新缩略图并将其粘贴到我的 web.config 文件中的旧值上

最后,我将 CER 文件安装到我的证书存储中,如此博客文章中所述:

http://www.cloudidentity.com/blog/2012/11/20/introducing-the-developer-preview-of-the-json-web-token-handler-for-the-microsoft-net-framework-4- 5-2/

上述博文中感兴趣的文字是以下文字:

.CER。双击该文件,点击“安装证书...”按钮,选择本地机器、受信任的人,然后您就开始营业了。

现在一切正常。希望这对你也有效。如果您需要更多帮助,请询问,我会尽力为您指明正确的方向

于 2014-02-13T03:56:11.457 回答