标签: azure-ad-b2c

Azure AD B2C 出现错误“Safari 无法打开页面,因为地址无效”

我们将Azure AD B2CXamarin Forms应用程序结合使用。我已经在Android上运行了它,并在iOS上运行了它。由于某些奇怪的原因,我现在在尝试登录iOS时收到此错误。

在此输入图像描述

登录屏幕出现,用户输入用户名和密码,但随后出现错误。查看AD 的Azure登录,我可以看到Azure已成功登录用户。这表明错误在于从Azure重定向回应用程序。

我已经根据此示例配置了应用程序,尤其是第 6 步。正如我所说,我之前已经完成了此操作。自从它开始工作以来我没有更改任何登录代码,那么还有什么可能导致它损坏呢?

azure xamarin.ios xamarin.forms azure-ad-b2c

5
推荐指数
1
解决办法
1845
查看次数

Azure AD B2C 自定义策略 - 动态绑定 MultiCheckbox

我正在尝试在 azure ad b2c 自定义策略声明架构中实现具有动态值的多复选框。

网址: https: //learn.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-configure-signup-self-asserted-custom

例子:

   <ClaimType Id="city">
  <DisplayName>Receive updates from which cities?</DisplayName>
  <DataType>string</DataType>
  <UserInputType>CheckboxMultiSelect</UserInputType>
  <Restriction>
    <Enumeration Text="Bellevue" Value="bellevue" SelectByDefault="false" />
    <Enumeration Text="Redmond" Value="redmond" SelectByDefault="false" />
    <Enumeration Text="Kirkland" Value="kirkland" SelectByDefault="false" />
  </Restriction>
    </ClaimType>
Run Code Online (Sandbox Code Playgroud)

如何在策略 XML 中将限制枚举与动态值而不是静态值绑定?我正在尝试将用户旅程中的 REST API 的返回值绑定到 MultiCheckBox。

回答

使用 javascript 生成多复选框。使用rest api调用来获取需要与multicheckbox绑定的值(输出声明)。将声明值传递到自定义html页面(自断言页面)使用javascript绑定输出声明和multicheckbox

azure azure-active-directory azure-ad-b2c

5
推荐指数
1
解决办法
1161
查看次数

Azure B2C 无密码注册,仅使用自定义策略中的电子邮件

我的系统需要在注册和登录时使用无密码和电子邮件身份验证。
这意味着用户只需输入电子邮件,然后系统会将一次性密码发送到该电子邮件并让用户登录(如果没有帐户)然而,只需使用该电子邮件默默地使用默认信息创建一个新的)
我尝试了此示例,它适用于现有的本地用户(使用电子邮件和密码)
是否有办法仅使用电子邮件创建本地用户?我的用户只看到输入电子邮件屏幕和输入密码屏幕。他们不需要填写其他任何东西。

azure azure-active-directory azure-ad-b2c

5
推荐指数
1
解决办法
2819
查看次数

Azure AD B2C 自定义策略编排步骤先决条件操作

是否可以有一个前提条件操作来指定应执行而不是跳过某个编排步骤?

使用自定义策略时,我见过很多前置条件操作指定SkipThisOrchestrationStep 的情况

而不是这个:

        <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
          <Value>extension_hasUpdatedPwd</Value>
          <Value>True</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

       <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
          <Value>extension_isMigrated</Value>
          <Value>False</Value>
          <Action>ExecuteThisOrchestrationStep</Action>
        </Precondition>
Run Code Online (Sandbox Code Playgroud)

我的用例是我有一个自定义属性,用于指定密码是否已重置。如果用户将该属性设置为“false”,那么我想执行编排步骤。如果用户将该属性设置为 true 或该属性不存在,那么我想跳过该编排步骤。

azure-ad-b2c

5
推荐指数
1
解决办法
3312
查看次数

5
推荐指数
1
解决办法
6190
查看次数

Azure Graph API 按数组值过滤

我正在尝试对我的 Azure B2C Active Directory 用户执行查询。

到目前为止,使用以下查询一切正常:

https://graph.windows.net/myTentant/users?$filter=
startswith(displayName,'test')%20
or%20startswith(givenName,'test')%20
or%20startswith(surname,'test')%20
or%20startswith(mail,'test')%20
or%20startswith(userPrincipalName,'test')
&api-version=1.6
Run Code Online (Sandbox Code Playgroud)

问题是,这些属性只是简单的值,如下所示:

"displayName: "testValue",
"givenName": "testValue",
"displayName: "testValue",
"surname": "testValue",
"mail: "testValue",
"userPrincipalName": "testValue",
Run Code Online (Sandbox Code Playgroud)

就我而言,我需要再使用一个语句,其中我需要检查一个数组是否像其他数组一样包含“test”。这个数组看起来像这样:

        "signInNames": [
            {
                "type": "emailAddress",
                "value": "test@mail.com"
            },                {
                "type": "emailAddress",
                "value": "test2@mail.com"
            }
        ]
Run Code Online (Sandbox Code Playgroud)

我已经在官方文档中搜索但没有运气......有什么想法吗?

azure azure-active-directory azure-ad-graph-api azure-ad-b2c

5
推荐指数
1
解决办法
4336
查看次数

如何使用自定义策略检查 AD B2C 中是否存在用户?

我有一个注册流程,它工作正常并且是多步骤的:

  1. 联系方式
  2. 确认
  3. 密码

现在的流程是,完成所有步骤后,将创建一个新用户,如果用户名已经存在,那么在最后一步中我会收到一条错误消息,表明该用户已经存在。现在我需要改变这个流程。输入联系方式(电子邮件)后,我想检查该用户是否存在。如果它存在,那么我需要显示在第一步本身的最后一步中显示的错误消息,并阻止旅程移动到下一步。

为了实现这一目标,我所做的是:

创建了一个 TP,使用电子邮件读取用户详细信息,并将其作为第一步的验证技术配置文件:

<TechnicalProfile Id="AAD-CheckUserExist">
                    <Metadata>
                        <Item Key="Operation">Read</Item>                        
                        <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
                    </Metadata>
                    <IncludeInSso>false</IncludeInSso>
                    <InputClaims>                       
                        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />                        
                    </InputClaims>
                    <OutputClaims>
                        <!-- Required claims -->
                        <OutputClaim ClaimTypeReferenceId="objectId" />
                        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
                        <!-- Optional claims -->
                        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
                        <OutputClaim ClaimTypeReferenceId="displayName" />
                        <OutputClaim ClaimTypeReferenceId="accountEnabled" />
                        <OutputClaim ClaimTypeReferenceId="otherMails" />
                        <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress"/>
                        <OutputClaim ClaimTypeReferenceId="signInNames.phoneNumber"/>
                        <OutputClaim ClaimTypeReferenceId="givenName" />
                        <OutputClaim ClaimTypeReferenceId="surname" />
                    </OutputClaims>
                    <IncludeTechnicalProfile ReferenceId="AAD-Common" />
                </TechnicalProfile>
Run Code Online (Sandbox Code Playgroud)

并添加<Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item><Metadata>.

以下是验证配置文件部分:

<TechnicalProfile Id="AAD-CheckUserExist">
                    <Metadata>
                        <Item Key="Operation">Read</Item>                        
                        <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item> …
Run Code Online (Sandbox Code Playgroud)

xml azure-ad-b2c identity-experience-framework

5
推荐指数
1
解决办法
3788
查看次数

如何使用 Azure B2C 处理多个 API

我需要帮助来了解 Azure B2C 在需要多个 API 的情况下如何工作。

我们在此示例中: https://api01.azurefunction.com/ https://api02.azurefunction.com/

https://app.azuresites.com/

B2C 实例samples.onmicrosoft.com

API01 公开范围: https://samples.onmicrosoft.com/api01/read

API02公开范围: https://samples.onmicrosoft.com/api02/write

WebApp 使用 MSAL.NET (Microsoft.Identity.Client 4.9.0),并且只能请求一个 API 的范围。任何请求两个不同资源的范围的尝试都将失败,如果使用 ConfidentialClientApplicationBuilder,则这是 AD/B2C 中的限制。

我尝试通过请求范围来启动到 STS 的多次往返,但失败了。即使它可以工作,由于可能会显示同意屏幕,因此不能考虑将其用于生产用途。

在这一点上,我需要建议如何在当前情况下工作。

我有多种选择:

  1. 为这些 API 实现外观并提供单点请求数据。但这至少有消耗资源的缺点。B2C 中不支持代表的其他重大限制。因此,我需要发明如何使用传入的安全上下文调用底层 Azure Functions。

  2. 使用 API 管理实例与 AD 集成,但对于我们的项目来说价格太大(~2K/月)

  3. 使用“黑客”为受 AD 保护的 Azure 函数定义“允许的令牌受众”,以允许接受为一种资源获取但发送到另一资源的令牌。这项工作有效,但我的范围将受到限制,因为范围列表将由获取令牌的资源定义。作为一种变体,我可以注册“假”应用程序并始终获取该应用程序的令牌。

  4. 在 Azure Function 中实现自定义 AccessToken 绑定器并完全发明轮子:(

选项#3 看起来不错。有一些限制,但我希望我能解决这个问题。

但最后,如果我需要与 Azure API(例如 AD Graph API)进行通信,如何获取令牌?使用RBAC?

请协助解决此问题。

azure azure-ad-b2c azure-rbac

5
推荐指数
1
解决办法
1176
查看次数

Flutter应用程序:如何实现正确的注销功能?

我有一个使用 Azure B2C 身份验证的 flutter 应用程序。为了实现这一点,我使用 flutter appAuth 包。登录过程工作正常,但 appAuth 不提供注销功能。登录后我得到一个访问令牌。到目前为止,我的注销是删除此访问令牌。

问题是,Azure 要求登录用户流程中的 Web 应用程序会话生命周期至少为 15 分钟。这意味着:如果用户在 15 分钟内登录并退出,他将自动再次登录。这使得其他用户无法登录。

我希望通过真正的注销来修复此行为,而不是仅删除访问令牌。在Azure Active Directory 文档中找到以下代码行。但我无法让它运行。对于注销功能有什么建议吗?

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Fjwt.ms%2F
Run Code Online (Sandbox Code Playgroud)

azure oauth-2.0 jwt flutter azure-ad-b2c

5
推荐指数
1
解决办法
2114
查看次数

ASP.NET Core 3.1 如何使用 Azure AD B2C 返回 401 Unauthorized 而不是 Challenge

在我的 API 控制器中,我希望该[Authorize]属性返回 401 Unauthorized,而不是强制执行 Azure AD B2C 登录质询,并将该响应返回到我的前端(对 API 进行 ajax 调用)。

由于 Azure CORS 策略,质询重定向不起作用。我找到了多个答案,但似乎都不起作用(未返回 401,它仍然尝试重定向到 Azure B2C 挑战)。

API控制器:

[Route("api/[controller]")]
[ApiController]
[Authorize]
public class HierarchyController : ControllerBase
// ...
Run Code Online (Sandbox Code Playgroud)

这是我当前的Startup.ConfigureServices代码:

// ...
services.Configure<AzureADB2COptions>(opt => 
            Configuration.GetSection("AzureAdB2C").Bind(opt));

services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
            .AddAzureADB2C(opt => Configuration.Bind("AzureAdB2C", opt))
            .AddCookie(opt =>
            {
                opt.Events = new CookieAuthenticationEvents
                {
                    OnRedirectToLogin = ctx =>
                    {
                        ctx.Response.StatusCode = 401;
                        return Task.CompletedTask;
                    }
                };
            });
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用:

services.ConfigureApplicationCookie(options =>
        {
            options.Events.OnRedirectToLogin = context =>
            {
                context.Response.Headers["Location"] = context.RedirectUri; …
Run Code Online (Sandbox Code Playgroud)

c# api asp.net-web-api azure-ad-b2c asp.net-core

5
推荐指数
1
解决办法
2006
查看次数