标签: azure-ad-b2c

Azure B2C 自定义策略 - ID/访问令牌未通过刷新令牌获取最新声明

我创建了 Azure B2C 自定义策略来获取 ID/访问令牌中的声明并通过“authorization_code”授予获取刷新令牌。然后我通过 Azure AD Graph API 更新了用户声明之一,即(“displayName”)。接下来,我尝试通过“refresh_grant”针对相同的 Azure B2C 自定义策略使用上述刷新令牌来获取 ID/访问令牌中更新的声明(“displayName”),但我没有得到它。

我已经在 B2C 策略中尝试过“RefreshTokenUserJourneyId”作为 JWT 颁发者,但没有任何效果。

更新后,我应该如何通过刷新令牌授予来获取 ID/访问令牌中的最新用户声明。

需要帮助。

azure azure-active-directory azure-ad-graph-api azure-ad-b2c identity-experience-framework

6
推荐指数
1
解决办法
742
查看次数

从 Azure AD 到 Azure B2C 的模拟

我们正在开发一个需要两种不同类型用户的 Web 应用程序:

  • 管理员(映射到 Azure AD、SSO);
  • 客户(映射到 Azure AD B2C);

客户使用其 Azure AD B2C 帐户登录 Web 应用程序。管理员使用其 Azure AD 帐户登录网站的管理 UI 区域。这部分很好。

然而,要求之一是管理员能够冒充客户,以便他们可以代表客户执行某些任务,例如下订单。

我们将使用 OAuth(.NET 包)进行授权。我的问题实际上有两个:

1)OAuth是否支持冒充其他账户?

2) 如果是,Azure AD 中的帐户是否有可能模拟 Azure AD B2C 中的用户 - 目前它们是不同的目录,彼此不可见。

也许我的问题有点模糊,我们正在寻找正确方向的一些指示。

提前谢谢了

点开发

asp.net-mvc single-sign-on oauth-2.0 azure-active-directory azure-ad-b2c

6
推荐指数
2
解决办法
2409
查看次数

Kubernetes 中的 Azure AD 身份验证无法取消对消息的保护。状态

我有一个使用 AzureAD b2c 身份验证(通过 OpenId Connect)的 dotnet core mvc Web 应用程序。当我针对 localhost 运行它时,它可以正常工作,但是当我将解决方案部署到 Kubernetes 并尝试登录时,我收到以下错误:

Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.Exception: An error was encountered while handling the remote login.
 ---> System.Exception: Unable to unprotect the message.State.
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)'
Run Code Online (Sandbox Code Playgroud)

我已经设置了一个带有 SSL 的 NGINX 入口,它将流量转发到 Kubernetes 中的服务,因此它充当集群内的反向代理。

为了确保保留请求的原始主机名,我已将以下内容添加到startup.cs:

services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders =
                    ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost;
                options.KnownNetworks.Clear();
                options.KnownProxies.Clear(); …
Run Code Online (Sandbox Code Playgroud)

c# oauth kubernetes azure-ad-b2c

6
推荐指数
1
解决办法
3278
查看次数

AAD B2C:在 Hasura 的 JWT 中输出嵌套的 JSON 对象

我们正在使用 Hasura 向消费者提供 GraphQL API。目前我们使用 Auth0 对用户进行身份验证,但我们希望迁移到 Azure AD B2C。

Hasura的 JWT 安全性要求是使用“ https://hasura.io/jwt/claims ”命名空间来提供自定义声明(例如 X-Hasura-Org-Id、X-Hasura-App-Id 等)。

我已经能够通过 AAD B2C 来:

  1. 使用 REST API 收集这些自定义声明所需的值;
  2. 使用;将单个string/值转换为 JSON 对象 和stringCollectionClaimsTransformation
  3. 返回 JWT 中转换后的声明。

但是,我无法弄清楚如何在不转义内容的情况下让 JSON 对象出现在最终的 JWT 中 - 即作为字符串而不是对象输出。

AAD B2C 是否能够输出 JWT 中的嵌套对象?


我们希望实现什么

这就是 Hasura 希望 JWT 命名空间的样子(注意对象https://hasura.io/jwt/claims

{
  "exp": 1588405829,
  "nbf": 1588402229,
  "ver": "1.0",
  "iss": "https://<redacted>.b2clogin.com/<redacted>/v2.0/",
  "sub": "<redacted>",
  "aud": "<redacted>",
  "acr": "b2c_1a_aaa_signupsignin",
  "nonce": "defaultNonce",
  "iat": 1588402229,
  "auth_time": 1588402229,
  "given_name": "Test", …
Run Code Online (Sandbox Code Playgroud)

azure-ad-b2c hasura

6
推荐指数
1
解决办法
1292
查看次数

为什么 Azure AD B2C 使用代码而不是 id_token 进行重定向?

我正在尝试设置 AD B2C,并遵循我在网上找到的各种教程。我正在测试用户流程。我可以成功登录,但是当我重定向到 时https://jwt.ms,它什么也没显示:

在此输入图像描述

但是,我注意到我的 URL 与教程中显示的不同。它有一个code而不是id_token

https://jwt.ms/?code=eyJraW...
Run Code Online (Sandbox Code Playgroud)

我一直试图找出导致 B2C 使用代码而不是 ID 令牌进行重定向的原因,但没有成功。谁能告诉我为什么会发生这种情况?

更新

好的,我现在明白是什么原因造成的,但不太明白我的设置与我在教程中看到的设置有何不同。我发现,如果我在应用程序注册中启用隐式授权,如下所示:

补助金

然后一切都会按预期进行。请注意,我必须启用两者

我还注意到,当我测试用户流时,这些隐式授权的状态决定了它是否具有response_type=coderesponse_type=id_token位于授权 URL 中:

在此输入图像描述

response_type除了更改隐式授予的状态之外,似乎没有其他方法可以在测试用户流程 UI 中设置所需的值。也许这是自教程制作以来 Azure 门户中行为的变化……?

azure azure-ad-b2c

6
推荐指数
1
解决办法
1473
查看次数

多种身份验证方案 ASPNET Core 3

请参阅下面的更新

我正在使用 Azure AD B2C,希望我的用户能够通过我的 Web 应用程序登录,并能够利用 JWT 不记名令牌并从移动应用程序调用 Web API 方法。

我可以让任一身份验证方案自行工作。例如,在我的startup.cs中我可以执行以下操作:

        services
            .AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
            .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
Run Code Online (Sandbox Code Playgroud)

其按预期工作(用户可以登录网站,但 JWT 不起作用)。

或者,我可以使用以下内容,然后只有 JWT 不记名令牌才可以工作:

        services
            .AddAuthentication(AzureADB2CDefaults.JwtBearerAuthenticationScheme)
            .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
Run Code Online (Sandbox Code Playgroud)

如果我想要其中任何一个工作,我可以执行以下操作(在/sf/answers/3479447331/的帮助下)

        services
            .AddAuthentication()
            .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options))
            .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));

        services.AddAuthorization(options =>
        {
            options.DefaultPolicy = new AuthorizationPolicyBuilder()
                                    .RequireAuthenticatedUser()
                                    .AddAuthenticationSchemes(AzureADB2CDefaults.AuthenticationScheme, AzureADB2CDefaults.JwtBearerAuthenticationScheme)
                                    .Build();
        }
Run Code Online (Sandbox Code Playgroud)

现在两者都可以工作。(编辑:实际上,它们并不能完全工作)

但是,我也有这个代码:

        app.UseAuthentication();
        app.UseMiddleware<MyAfterAuthenticatedMiddleware>();
        app.UseAuthorization();
Run Code Online (Sandbox Code Playgroud)

问题是,当我使用任一身份验证的组合时,当我的中间件代码运行时,我的用户未经过身份验证(在中间件代码中)并且没有声明等,但稍后在管道中获取它们。

这里发生了什么事?如何解决这个问题?

看来当我不指定默认身份验证方案时(为了拥有多个方案),直到管道中的授权步骤时,身份验证才会发生。

我需要我的中间件在身份验证之后和授权之前运行。如何通过多种身份验证方案实现这一点?

更新——解决了!但一定有更好的方法!

首先,我要向那些创建 .NET 安全产品的人们表示敬意。这很重要,也很困难。我确实认为可能还有很大的改进空间。

大多数开发人员在必要时都会涉足安全领域,然后又回到他们的“常规”工作中。除非你每天都使用它,否则很难保持领先。每次你回到它时,一切都会再次改变。

这一定是一个常见的场景:我希望我的用户能够登录我的网站并与各种 Web API 方法进行交互。我希望他们也能够通过其他方式访问这些相同的 API …

c# authentication jwt azure-ad-b2c asp.net-core

6
推荐指数
0
解决办法
1951
查看次数

Azure B2C 在统一注册/登录流程中首先显示注册页面

我一直在使用有关 ContentDefinitions 的b2c 入门包MSDN 文档,以及 Azure B2C 产品的各个其他方面。

正如任何曾经尝试实施自定义策略的人所意识到的那样,文档并不总是那么彻底或明确,并且通常在语法上不正确或缺少细节。

考虑到这一点,我想知道:

  • 在统一的注册/登录流程中,是否可以在“登录”屏幕之前触发“注册”屏幕?
  • 另外,是否可以将“登录”屏幕链接添加到“注册”屏幕?
    我知道可以通过添加<Item Key="setting.showSignupLink">false</Item>元数据来将“注册”屏幕链接添加到 ContentDefinition,但在使用 ContentDefinition 时,该链接似乎是开箱即用的api.signuporsignin
    到目前为止,我已经尝试将 a 添加<Item Key="setting.showSigninLink">false</Item>到我的 ContentDefinition 的元数据块中,但无济于事(我没有在任何地方的 MSDN 文档中找到此内容,只是想尝试一下)。

为了澄清,在注册/登录流程中,我想在启动策略后立即显示“注册”屏幕,然后可以选择导航到“登录”页面。

任何建议将不胜感激。

azure azure-ad-b2c azure-ad-b2c-custom-policy

6
推荐指数
2
解决办法
1465
查看次数

登录 Azure B2C 页面上的内容安全策略错误

在登录/重置密码流程中的不同步骤上单击“下一步/继续”按钮时,Azure B2C 页面会引发内容安全策略错误。如果我输入电子邮件(或没有电子邮件)并在登录的第一步单击“下一步”按钮,则会引发错误,但如果按 Enter 键,则不会出现错误。

图片1:

在此输入图像描述

原因是,一方面,这些页面上的 CSP 不允许使用内联代码,但另一方面,Azure B2C 插入了一些内联代码。表单中的 Fe action="javascript:void(0)"。

图片2:

在此输入图像描述

调试 js 代码显示有一行代码阻止( action="javascript:void(0)")在按 Enter 键时调用此内联操作,并且在单击“下一步”按钮时没有此类阻止。不同步骤上的表单中有几个这样的地方。

这部分代码是由Azure B2C生成的。无法更改 CSP,因为它也在 Azure 端设置。事实上,这个错误并不会阻止登录流程,而是在每个步骤上抛出很多错误

有人有同样的问题并建议如何避免吗?

content-security-policy azure-ad-b2c aad-b2c

6
推荐指数
1
解决办法
1967
查看次数

具有 SSO 的 Azure AD B2C 2FA,无需验证两次

我目前已在 Azure AD B2C 中使用自定义策略实现了以下内容:

  • 用户使用其 Office 或 Google 帐户登录。
  • 如果他们在社交帐户上启用了 2FA,他们就会对自己进行身份验证。
  • 他们被发送回 B2C 并被要求提供 B2C 2FA(我不希望这样,如果他们已经在其社交帐户上进行了 2FA)

有什么方法可以实现用户必须验证两次而不是三次吗?如果用户尚未为其社交帐户设置 2FA,我想保留 2FA。

例如,是否可以检查社交登录是否使用了 2FA?或者是否可以对社交帐户登录实施 2FA?

我的设置使用了以下模板:

azure azure-ad-b2c azure-ad-b2c-custom-policy

6
推荐指数
0
解决办法
299
查看次数

Azure B2C 注销然后登录不会通过密码提示询问用户

我正在使用 Azure AAD B2C 来管理我的用户和身份验证流程。我正在尝试创建一种用户体验,用户可以使用不同的帐户登录。用户应该能够注销其帐户,然后单击登录并能够提供不同的用户名和密码。

但是,目前我退出了。我可以通过 F12 调试器确认所有 cookie 均已清除。然后我单击登录,它让我重新登录到以前的帐户,而无需询问我的用户名和密码。

我不确定发生了什么或为什么。这是我的登录代码。

public IActionResult SignIn([FromRoute] string scheme)
    {
        scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
        var redirectUrl = Url.Content("~/");
        var properties = new AuthenticationProperties { RedirectUri = redirectUrl, AllowRefresh = true };
        properties.Items["policy"] = "B2C_1_SignUpIn";
        return Challenge(properties, scheme);
    }
Run Code Online (Sandbox Code Playgroud)

这是我的退出代码。

public async Task<IActionResult> SignOutAsync([FromRoute] string scheme)
    {
        HttpContext.Session.Clear();
        if (HttpContext.Request.Cookies.Count > 0)
        {
            var test = HttpContext.Request.Cookies.ToList();
            var siteCookies = HttpContext.Request.Cookies.Where(c => c.Key.Contains(".AspNetCore.") || c.Key.Contains("Microsoft.Authentication"));
            foreach (var cookie in siteCookies)
            {
                Response.Cookies.Delete(cookie.Key);
            }
        }

        await …
Run Code Online (Sandbox Code Playgroud)

c# openid-connect azure-ad-b2c .net-6.0

6
推荐指数
1
解决办法
1153
查看次数