未调用自定义JwtSecurityTokenHandler

问题描述:

我有一个使用Azure Active Directory进行身份验证的.NET MVC应用程序。未调用自定义JwtSecurityTokenHandler

我想添加一个自定义的JWTSecurityTokenHandler来验证对应用程序执行一些基本的GET请求的控制台应用程序。然而,每个请求只是被重定向到Azure AD登录页面而不是被传递给JWT处理程序(我的断点和日志语句在处理程序中未被命中)。有任何想法吗?

Web.config文件:

<system.identityModel> 
    <identityConfiguration> 
     <audienceUris> 
     <add value="https://localhost:44300/" /> 
     </audienceUris> 
     <securityTokenHandlers> 
     <add type="QS.Admin.Infrastructure.MyJwtHandler, QS.Admin" /> 
     <securityTokenHandlerConfiguration> 
      <certificateValidation certificateValidationMode="None" /> 
     </securityTokenHandlerConfiguration> 
     </securityTokenHandlers> 
     <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"> 
     <authority name="https://[myaccessdomain].accesscontrol.windows.net/"> 
      <keys> 
      <add thumbprint="[thumbprint]" /> 
      </keys> 
      <validIssuers> 
      <add name="https://[myaccessdomain].accesscontrol.windows.net/" /> 
      </validIssuers> 
     </authority> 
     </issuerNameRegistry> 
     <!--certificationValidationMode set to "None" by the the Identity and Access Tool for Visual Studio. For development purposes.--> 
     <certificateValidation certificateValidationMode="None" /> 
    </identityConfiguration> 
    </system.identityModel> 
    <system.identityModel.services> 
    <federationConfiguration> 
     <cookieHandler requireSsl="false" /> 
     <wsFederation passiveRedirectEnabled="true" issuer="https://[myaccessdomain].accesscontrol.windows.net/v2/wsfederation" realm="https://localhost:44300/" requireHttps="false" /> 
    </federationConfiguration> 
    </system.identityModel.services> 

web.config中的设定都正确无误。

几件事情要检查:

  1. 确保ACS被配置为您的领域发出JWT令牌。

  2. 如果你从MS插入JwtSecurityTokenHandler - 它是否会被击中?这将有助于将问题隔离到您的自定义处理程序与ACS或web.config中的设置。

除了上述建议

, 的jwtsecuritytokenhandlers责任是验证JWT和上游服务要求。我没有在配置中的任何地方看到会话管理,如果缺少,每次调用主机都需要从ACS获取新的令牌。