c# - ASP Net Core 调用 Azure B2C 策略
问题描述
我花了几天时间弄清楚如何从 ASP Net 核心正确调用 Azure B2C 策略/用户流。我们可以调用 B2C 登录并注册自定义策略。
我们为更改密码和创建的其他自定义策略实施了相同的方法。但是,当我们调用其他自定义策略(不包含在下面的代码中但相同的实现)时,我们遇到了不同的错误。每当我们修复错误时,都会出现新错误。
这让我认为我们没有以正确的方式调用 B2C 自定义策略/用户流。我可以知道下面的代码是否正确,或者您可以提出更好的方法。
谢谢你。
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => HostingEnvironment.IsProduction();
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect("B2C_1A_SignIn", options =>
{
options.Authority = $"https://{Configuration["B2C_1A_SignIn:Domain"]}";
options.MetadataAddress = $"https://{Configuration["B2C_1A_SignIn:MetadataAddress"]}";
// Configure the Auth0 Client ID and Client Secret
options.ClientId = Configuration["B2C_1A_SignIn:ClientId"];
options.ClientSecret = Configuration["B2C_1A_SignIn:ClientSecret"];
// Set response type to code
options.ResponseType = OpenIdConnectResponseType.IdToken;
// Configure the scope
options.Scope.Clear();
options.Scope.Add("openid");
// Set the callback path, so Auth0 will call back to http://localhost:3000/callback
// Also ensure that you have added the URL as an Allowed Callback URL in your Auth0 dashboard
options.CallbackPath = new PathString("/Home");
// Configure the Claims Issuer to be Auth0
options.ClaimsIssuer = "B2C_1A_SignIn";
// Saves tokens to the AuthenticationProperties
options.SaveTokens = true;
})
.AddOpenIdConnect("B2C_1A_ChangePassword", options =>
{
options.Authority = $"https://{Configuration["B2C_1A_ChangePassword:Domain"]}";
options.MetadataAddress = $"https://{Configuration["B2C_1A_ChangePassword:MetadataAddress"]}";
options.ClientId = Configuration["B2C_1A_ChangePassword:ClientId"];
options.ClientSecret = Configuration["B2C_1A_ChangePassword:ClientSecret"];
options.ResponseType = OpenIdConnectResponseType.IdToken;
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.CallbackPath = new PathString("/Home");
options.ClaimsIssuer = "B2C_1A_ChangePassword";
options.SaveTokens = true;
})
);
}
家庭控制器.cs
public async Task SignIn()
{
await HttpContext.ChallengeAsync("B2C_1A_SignIn", new AuthenticationProperties() { RedirectUri = "/home" });
}
[Authorize]
public async Task ChangePassword()
{
await HttpContext.ChallengeAsync("B2C_1A_ChangePassword", new AuthenticationProperties() { RedirectUri = "/home" });
}
解决方案
您的回调路径可能至少需要更改。指定回调路径,如/signin-callback
和/change-pw-callback
。
他们不需要匹配您应用中的操作。在您被重定向回您的应用程序后,身份验证方案通常会向您指定的 URL(或当前 URL)发出“本地重定向”。
推荐阅读
- c# - 如何从 Web API 控制器的 HttpPost 异步方法返回任务将错误消息传递给客户端
? - php - Symfony:不支持格式“html”,必须实现处理程序
- angular - 我无法从 Angular 的数组中获取字符串值
- r - geom_point,按因子着色
- html - :nth-child 不适用于相同类名的元素
- reactjs - 如何在reactjs的水平菜单中为列表提供导航
- xamarin - 每次我在 xamarin 中保存记录时重命名记录的文件
- ruby-on-rails - 在 Rails 中,为什么 `tomorrow` 不是 `today` 的后天?
- mongodb - Mongoose .update() 什么都不做
- python - 如何通过在python中逐个字母和反向打印来打印字符串