我正在使用 .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=登录
我创建了 myredirecturl 的回调端点,它检查来自 B2C 登录的任何错误消息并获取不记名令牌。
我已设置 Azure 登录策略并指定了 myredirecturl。
我的所有控制器都受到 [Authorize] 属性的保护,以防止在未登录的情况下进行访问。
这一切都很好。但我希望发生以下情况:
1)如果我注销并输入https://mydomain/somecontroller/somemethod
2) 我希望进入登录页面(现在就会发生这种情况)
3) 成功登录后我想自动重定向到 https://mydomain/somecontroller/somemethod
现在不会发生这种情况,我只能被带到主页,因为我无法找到将 ReplyUrl 作为查询字符串参数传递到 SignIn Endpoint,然后从 B2C 回调中检索它的方法。
我希望我的重定向网址是从浏览器提交的任何内容。
如果我使用标准身份验证,我可以这样做:
mydomain/帐户/登录?redirecturl=mydomain/控制器/方法
找到答案: 如果您在调用 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=登录&状态=我的值
B2C在redirect_uri中调用的端点也包含此值,因此您可以在成功登录后使用它来重定向用户。