我正在使用 .NET Core V2 开发单页应用程序并使用 Azure B2C 身份验证。
我的 Startup.cs 具有以下内容:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddAzureAdB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
public static AuthenticationBuilder AddAzureAdB2CBearer(this AuthenticationBuilder builder)
=> builder.AddAzureAdB2CBearer(_ => { });
public static AuthenticationBuilder AddAzureAdB2CBearer(this AuthenticationBuilder builder, Action<AzureAdB2COptions> configureOptions)
{
builder.Services.Configure(configureOptions);
builder.Services.AddSingleton<IConfigureOptions<JwtBearerOptions>, ConfigureAzureOptions>();
builder.Services.AddScoped<IClaimsTransformation, ClaimsTransformer>();
builder.AddJwtBearer();
return builder;
}
我有一个重定向到 B2C 登录页面的登录端点 IE。
https://login.microsoftonline.com/{mydomain}/oauth2/v2.0/authorize?p={mysigninpolicy}&client_id={3}&nonce=defaultNonce&redirect_uri={myredirecturl}&scope=openid&response_type=id_token&response_mode=form_post&prompt=login
我创建了 myredirecturl 的回调端点,它检查来自 B2C 登录的任何错误消息并获取不记名 token 。
我已设置指定了 myredirecturl 的 Azure 登录策略。
然后,我的所有 Controller 都受到 [Authorize] 属性的保护,以防止在未登录的情况下进行访问。
这一切都运行良好。但我希望发生以下情况:
1) 如果我注销并输入 https://mydomain/somecontroller/somemethod
2) 我希望进入登录页面(现在就会发生这种情况)
3) 成功登录后我想自动重定向到 https://mydomain/somecontroller/somemethod
现在不会发生这种情况,我只能被带到主页,因为我无法找到将 ReplyUrl 作为查询字符串参数传递到登录端点,然后从 B2C 回调中检索它的方法。
我希望我的重定向网址是从浏览器提交的任何内容。
如果我使用标准身份验证,我可以这样做:
mydomain/account/login?redirecturl=mydomain/controller/method
最佳答案
找到答案: 如果您在调用 B2C 登录时包含 &state={some value} 参数。
https://login.microsoftonline.com/{mydomain}/oauth2/v2.0/authorize?p={mysigninpolicy}&client_id={3}&nonce=defaultNonce&redirect_uri={myredirecturl}&scope=openid&response_type=id_token&response_mode=form_post&prompt=login&state=myvalue
B2C在redirect_uri中调用的端点也包含此值,因此您可以在成功登录后使用它来重定向用户。
关于asp.net-core-2.0 - Azure B2C 成功登录后动态重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48465206/