Joh*_*ohn 5 c# azure-ad-b2c asp.net-core-2.1
我正在尝试使用 Azure AD B2C 运行ASP.NET Core 2.1 Web 应用程序。我在经过大量研究(以及更多的试验和错误)之后运行了这个,因为文档中的说明有点偏离。
登录/注册过程使用项目设置向导期间的默认脚手架,以及新的Microsoft.AspNetCore.Authentication.AzureADB2C.UI Nuget,从而在启动过程中提供简化但“封闭式”的体验。
目前的问题是,我无法使用与“signin-oidc”不同的自定义回复 URL 来完成这项工作。我已经读过“signin-oidc”以某种方式嵌入到提供程序中,因此是默认设置。
我定义OnboardingController了一个Start操作,我希望用户在注册后登陆,所以我做了以下操作:
localhost:12345/Onboarding/Start有效。页面显示正确。"CallbackPath": "/signin-oidc"为"CallbackPath": "/Onboarding/Start"

C) 我转到租户并将应用程序的回复 URL 更改为localhost:12345/Onboarding/Start. 重要提示:与 ADB2C 示例和指南不同,您必须在回复 URL 后附加 signon-oidc 或自定义请求路径!本地主机:12345 还不够!

我可以确认身份验证有效:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:Information: AuthenticationScheme: AzureADB2CCookie 已登录。Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request completed in 56.201ms
然后,当我在浏览器中手动导航到 /Onboarding/Start 时,我得到
远程身份验证错误:关联失败。
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:12345/Onboarding/start
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:Warning: .AspNetCore.Correlation. state property not found.
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:Information: Error from RemoteAuthentication: Correlation failed..
Run Code Online (Sandbox Code Playgroud)
1. 但我从来没有被重定向到目标/开始页面。相反,我回到了根主页,就像我使用“signin-oidc”时发生的情况一样。为什么会这样,我如何让它停止去那里?
2. 如何根据您是登录还是 UP 来设置不同的回复 URL?我真的不能为一个使用注册策略,为另一个使用单独的登录策略,因为回复 URL 是相同的。
我是 .Net Core 的新手,我什至不知道如何调试它。使用 B2C 登录似乎是一个模糊的过程。任何见解将不胜感激。
编辑:这是自定义帐户控制器,它没有内置到 AzureADB2C 的 Nuget 包中。虽然 Nuget 包提供了内部 AccountController,但它不允许您设置自定义回复 URL。然而,使用我自己的帐户控制器对我不起作用。我也没有收到“关联失败”错误,而是根本没有收到任何错误。
[Route( "[controller]/[action]" )]
public class AccountController : Controller
{
private readonly AzureADB2COptions azureAdB2COptions;
private const string PolicyAuthenticationProperty = "Policy";
private string scheme = AzureADB2CDefaults.AuthenticationScheme;
public AccountController( IOptions<AzureADB2COptions> b2cOptions )
{
azureAdB2COptions = b2cOptions.Value;
}
[HttpGet]
[Route( "/[controller]/SignIn" )]
public IActionResult SignIn()
{
var callbackUrl = Url.Action( nameof( OnboardingController.Start ), "Onboarding", values: null, protocol: Request.Scheme );
var properties = new AuthenticationProperties { RedirectUri = callbackUrl };
properties.Items[PolicyAuthenticationProperty] = azureAdB2COptions.SignUpSignInPolicyId;
return this.Challenge( properties, scheme );
}
Run Code Online (Sandbox Code Playgroud)
B2C 的 startup.cs 代码与为我生成的默认 .NETCore 2.1 模板没有变化:
services.AddAuthentication( AzureADB2CDefaults.AuthenticationScheme )
.AddAzureADB2C( options =>
{
Configuration.Bind( "AzureAdB2C", options );
} );
Run Code Online (Sandbox Code Playgroud)
据我了解,您需要启用应用程序声明 -> newUser。
该标志仅在用户最初注册时设置为 true。一旦他们被重定向回您的网站,您将需要阅读声明并重定向到您的入职/启动或其他控制器(如果他们是现有用户)。
| 归档时间: |
|
| 查看次数: |
3601 次 |
| 最近记录: |