Azure B2C 成功登录后动态重定向

问题描述 投票:0回答:2

我正在使用 .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/控制器/方法

asp.net-core-2.0 azure-ad-b2c
2个回答
3
投票

找到答案: 如果您在调用 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中调用的端点也包含此值,因此您可以在成功登录后使用它来重定向用户。


0
投票

使用如下,它处理所有返回规则。只需作为 loginPath?returUrl={url} 传递,然后在 program.cs 上使用下面的代码

returnUrlHandling

© www.soinside.com 2019 - 2024. All rights reserved.