asp.net - Azure AD B2C - ASP.NET Core 注册链接

标签 asp.net azure asp.net-core azure-ad-b2c

我有一个 ASP.NET Core Web 应用和一个 Azure AD B2C 租户。

在 View 中,我可以按以下样式制作按钮条目,并且一切正常:

<ul class="nav navbar-nav navbar-right">
     <li><a asp-area="AzureADB2C" asp-controller="Account" asp-action="SignIn">Sign in</a></li>
     <li><a asp-area="AzureADB2C" asp-controller="Account" asp-action="EditProfile">Edit Profile</a></li>
     <li><a asp-area="AzureADB2C" asp-controller="Account" asp-action="ResetPassword">Reset Password</a></li>
     <li><a asp-area="AzureADB2C" asp-controller="Account" asp-action="SignOut">Sign out</a></li>
</ul>

并在网络应用程序 appsettings.json 中进行配置:

"AzureAdB2C": {
    "Instance": "https://login.microsoftonline.com/tfp/",
    "ClientId": "[...]",
    "CallbackPath": "/signin-oidc",
    "Domain": "[...]",
    "SignUpSignInPolicyId": "B2C_1_SignUpOrSignInPolicy",
    "ResetPasswordPolicyId": "B2C_1_PasswordResetPolicy",
    "EditProfilePolicyId": "B2C_1_ProfileEditPolicy"
  }

我想添加一个按钮条目以直接访问 SignUpOrSignInPolicy 的注册页面,但这不起作用:

<li><a asp-area="AzureADB2C" asp-controller="Account" asp-action="SignUp">Sign up</a></li>

我需要改变什么?或者有关于这个“AzureADB2C帐户” Controller 的任何文档吗?

最佳答案

您可以创建自定义帐户 Controller ,以便在登录页面上向用户显示注册链接并路由到相应的操作。检查以下代码以供引用 -

[Route("[controller]/[action]")]
public class AccountController : Controller
{
    public IActionResult SignUp()
    {
        return this.Challenge(
            new AuthenticationProperties { RedirectUri = "/" }, "B2C_1_B2C_POC_SignUp");
    }
}

此外,通过添加注册策略的身份验证服务来修改 StartUp.cs 服务,如下所示:-

services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
                .AddAzureADB2C(options => Configuration.Bind("AzureADB2C", options));
            services.AddAuthentication(options => options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme).AddOpenIdConnect("B2C_1_B2C_POC_SignUp", GetOpenIdSignUpOptions("B2C_1_B2C_POC_SignUp"))
                 .AddCookie(); 

这里是上面代码中引用的添加OpenId SignUp Options的方法 -

private Action<OpenIdConnectOptions> GetOpenIdSignUpOptions(string policy)
            => options =>
            {
                options.MetadataAddress =
                   "https://login.microsoftonline.com/abc.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=" + policy;
                options.ClientId = "xxxxxxxxxx";//this.ClientId;
                options.ResponseType = OpenIdConnectResponseType.IdToken;
                options.SignedOutCallbackPath = "/signout/" + policy;
                options.CallbackPath = "/signin-oidc";
                options.SignedOutRedirectUri = "/";
            };

关于asp.net - Azure AD B2C - ASP.NET Core 注册链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52175124/

相关文章:

entity-framework - 在 Asp.Net Core 中具有两个上下文的数据库迁移(Docker 上的 SQL Server)

azure - 通过 Python SDK 获取规模集中虚拟机的私有(private) IP 地址(规模集中没有公共(public) IP 地址)

azure - 应用服务 VNet 与 Azure 存储服务端点集成

asp.net - 信号器是否为同一应用程序内的每个集线器创建连接,或者所有集线器共享相同的连接?

javascript - ASP.NET中 Crystal 报表的空白结果问题

wcf - 在 Azure 上的本地主机上使用 WCF

visual-studio-2015 - ASP.NET 5 beta 7 的共享类库引用

azure - 如何修复 - 重新登录时,CORS 策略已阻止对 'https://login.windows.net......' 处的 fetch 进行访问

asp.net - 从 ASP.NET 应用程序调用时,编译的 C dll 无法设置指针

c# - 单一方法即扩展方法之间的调用不明确