未调用自定义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中的设定都正确无误。
几件事情要检查:
确保ACS被配置为您的领域发出JWT令牌。
如果你从MS插入JwtSecurityTokenHandler - 它是否会被击中?这将有助于将问题隔离到您的自定义处理程序与ACS或web.config中的设置。
答
除了上述建议
, 的jwtsecuritytokenhandlers责任是验证JWT和上游服务要求。我没有在配置中的任何地方看到会话管理,如果缺少,每次调用主机都需要从ACS获取新的令牌。