【问题标题】:Handle password reset with Azure B2C in .Net Core Web Api在 .Net Core Web Api 中使用 Azure B2C 处理密码重置
【发布时间】:2018-07-31 06:38:21
【问题描述】:

我正在构建一个允许用户使用 Azure B2C 登录或注册的 Web API。我正在使用注册或登录策略,它会提示“忘记密码?”关联。单击此链接会给我一个 access_denied 错误描述 AADB2C90118

如何在我的 Web API 中处理此错误?

注意:我使用customized authentication UI 登录/注册表格。

【问题讨论】:

  • 您是否定义并配置了密码重置策略?执行此操作时,请确保您使用的身份提供程序已在重置策略中启用。
  • 是的,我已经定义并配置了密码重置策略并启用了重置策略。

标签: .net azure authentication .net-core asp.net-core-webapi


【解决方案1】:

看看wingtips sample

注意,这主要说明你的应用程序在出现这个错误时需要做一个重定向。不确定您希望 API 扮演什么角色。

具体查找您提到的错误代码AADB2C90118: https://github.com/Azure-Samples/active-directory-b2c-advanced-policies/search?utf8=%E2%9C%93&q=AADB2C90118&type=

处理重置的控制器操作:

https://github.com/Azure-Samples/active-directory-b2c-advanced-policies/blob/master/wingtipgamesb2c/src/WingTipIdentityWebApplication/Api/Controllers/AccountController.cs#L252

一些代码取自那里:

 options = new OpenIdConnectAuthenticationOptions
        {
            Notifications = new OpenIdConnectAuthenticationNotifications()
            {
                AuthenticationFailed = context =>
                {
                    context.HandleResponse();

                    if (context.ProtocolMessage.Error == "access_denied" && context.ProtocolMessage.ErrorDescription.StartsWith("AADB2C90118"))
                    {
                        context.Response.Redirect("/Account/ResetPassword");
                    }

        var openIdConnectAuthenticationOptions = new OpenIdConnectOptions
        {
 [...]
            Events = new OpenIdConnectEvents
            {

                OnRemoteFailure = context =>
                {
 [...]
                    // Handle the error that is raised when a user has requested to recover a password.
                    if (!string.IsNullOrEmpty(context.Failure.Message) &&
                        context.Failure.Message.Contains("access_denied") &&
                        context.Failure.Message.Contains("AADB2C90118"))
                    {
                        context.Response.Redirect($"/Account/RecoverPassword?ReturnUrl={context.HttpContext.Items["redirect_uri"]}");
                        context.HandleResponse();
                    }

【讨论】:

  • 不确定如何使用 OpenId 来配合我设置 API 的方式。我正在使用 Jwt Bearer 中间件来处理令牌验证,但似乎样本没有使用它。 Here is the example I used。基本上,我该如何处理错误代码并使用此示例进行重定向?
  • 尝试调试startup.cs中的AuthenticationFailed或者查看JwtOptions的其他事件。但是您可能需要更改您的应用程序本身来处理错误,我假设您不仅仅是一个 api 和登录屏幕?
猜你喜欢
  • 2019-05-30
  • 2014-05-31
  • 2019-07-14
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
相关资源
最近更新 更多