我有一个.NET MVC应用程序,它使用Azure Active Directory进行身份验证。
我正在尝试添加自定义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>
答案 0 :(得分:1)
除上述建议外, jwtsecuritytokenhandlers的职责是验证jwt并在上游提供索赔。我没有在配置中的任何地方看到会话管理,如果缺少,每次调用主机都需要从ACS获取新令牌。
答案 1 :(得分:0)
web.config中的设置看起来正确。
要检查的事情:
确保ACS配置为您的领域发布JWT令牌。
如果您从MS插入JwtSecurityTokenHandler - 是否会受到攻击?这有助于将问题与自定义处理程序隔离,而不是与ACS或web.config中的设置隔离。