【问题标题】:Validating Azure AD B2C JWT in a .NET MVC application在 .NET MVC 应用程序中验证 Azure AD B2C JWT
【发布时间】: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 值更改为绝对无效的值,但我从未看到任何表明验证检查失败的迹象(尽管在这种情况下应该失败)。

【问题讨论】:

标签: c# asp.net-mvc azure visual-studio-2019 azure-ad-b2c


【解决方案1】:

OpenIdConnectAuthenticationNotifications 类型的 OpenIdConnectAuthenticationOptions 类的 Notifications 属性使您能够在身份验证中间件中处理 OpenID Connect 消息时处理事件。

例如,OpenIdConnectAuthenticationNotifications 类的 SecurityTokenReceived 委托在从 Azure AD B2C 接收到 ID 令牌之后但在验证之前调用。

【讨论】:

    猜你喜欢
    • 2017-09-25
    • 2017-06-20
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2016-09-08
    • 2021-08-21
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多