【发布时间】:2020-03-10 18:54:08
【问题描述】:
我无法完全理解我的应用程序登录功能是否按预期运行。我遇到的主要问题是我无法验证来自 Azure AD B2C 的令牌是否正在被验证。我可以正常登录,应用程序将通过循环 ClaimsPrincipal.Current.Claims 向我显示令牌的内容,但我无法弄清楚如何在通过我的 Azure AD B2C 端点登录之间捕获任何内容,并且我的 MVC 应用程序接受令牌并将我登录到我的 MVC 应用程序。
我首先转到创建新项目 > ASP.NET Web 应用程序 (.NET) > .NET Framework 4.7.2 > 使用身份验证。在身份验证设置中,使用了以下选项:
- 工作或学校帐户
- 云 - 单一组织
- 域:我的 omnimicrosoft.com 域
我的 Startup.Auth.cs 进行了一些修改,如下所示:
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
private static string wellKnownMetadata = ConfigurationManager.AppSettings["ida:WellKnownMetadataUrl"];
private static string issuer = ConfigurationManager.AppSettings["ida:Issuer"];
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
MetadataAddress = wellKnownMetadata,
ResponseType = OpenIdConnectResponseType.IdToken,
ClientId = clientId,
RedirectUri = postLogoutRedirectUri,
PostLogoutRedirectUri = postLogoutRedirectUri,
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
ValidateLifetime = true,
ValidateTokenReplay = true,
RequireSignedTokens = true,
ValidIssuer = issuer,
ValidAudience = clientId,
ValidateIssuer = true,
ValidateAudience = true
}
});
}
登录按钮代码为:
public void SignIn()
{
// Send an OpenID Connect sign-in request.
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
登录到我的 B2C 端点后检查请求时,我看到两个条目。一个是我尝试验证的带有 id_token 的 302 POST 到我的注销后重定向 URI,另一个是对我的主页的 200 响应,由 { RedirectUri = "/" } 提供。 302 响应包含令牌,但 200 响应是我在浏览器中看到的全部。不知何故,应用程序正在从 302 响应中捕获令牌(我认为)并将我重定向到主页,但我从未与令牌进行交互。我已将 ValidIssuer 值更改为绝对无效的值,但我从未看到任何表明验证检查失败的迹象(尽管在这种情况下应该失败)。
【问题讨论】:
-
请参考stackoverflow.com/questions/59840170/…了解如何验证令牌
标签: c# asp.net-mvc azure visual-studio-2019 azure-ad-b2c