标签: azure-ad-b2c

Azure AD B2C应使用哪个Graph API

我们正在考虑在应用程序中使用Azure AD B2C,我对使用Azure AD B2C时要使用的软件包感到困惑.

此问题讨论了MSAL和ADAL库之间的区别:用于Azure AD B2C和Xamarin的MSAL或ADAL库.

除此之外,Azure AD Graph API引用现在出现警告,而不是使用Microsoft Graph API.B2C的所有示例似乎都没有使用Microsoft Graph API,似乎没有关于使用B2C的Microsoft Graph支持级别的描述.

我需要能够在B2C中创建具有自定义属性的用户,然后使用Graph API查询它们.

用于与Azure AD B2C交互的正确程序包是什么?是否有示例显示如何执行此操作?

azure-active-directory microsoft-graph azure-ad-b2c

13
推荐指数
1
解决办法
4932
查看次数

Azure MSAL JS:如何编辑个人资料?

我已经成功实现了Azure AD B2C的MSAL JS.下一步是让用户编辑他们的个人资料.我为编辑个人资料创建了一个新政策.但是如何将用户重定向到那里?只有登录方法/获取令牌方法.我试图将权限设置为不同的策略.然后它会重定向到正确的页面,但随后它开始抱怨范围内的错误,并在本地搞乱令牌.

editProfile() {
  this.userAgentApp.authority = this.policyEditProfile;
  this.userAgentApp.loginRedirect();
}
Run Code Online (Sandbox Code Playgroud)

ASP.NET代码示例显式提供了设置editProfile策略ID的选项:https://docs.microsoft.com/en-gb/azure/active-directory-b2c/active-directory-b2c-devquickstarts-web-dotnet -susi#更新代码使用的,您的租户,和政策

MSAL.JS中缺少这样的感觉,我必须手动制作URL,这是正确的吗?

azure azure-ad-b2c msal.js

13
推荐指数
1
解决办法
872
查看次数

通过User上的自定义属性搜索Active Directory B2C

我们正在使用B2C并将客户编号存储为用户的扩展字段.单个用户可以拥有一个或多个客户,并且它们存储在逗号分隔的字符串中.

我现在正在做的事情非常低效:1.获取所有用户2.获取每个用户的扩展属性3.检查他们是否具有所需的扩展属性以及是否包含我想要的客户.4.构建我想要的用户列表.

Adclient是IActiveDirectoryClient

var users = (await GetAllElementsInPagedCollection(await AdClient.Users.ExecuteAsync())).ToList();
var customersUsers = users.Where(user => user.AccountEnabled.HasValue && user.AccountEnabled.Value).Where(user =>
    {
        var extendedProperty = ((User) user).GetExtendedProperties().FirstOrDefault(extProp => extProp.Key == customersExtendedProperty.Name).Value?.ToString();
        return extendedProperty != null && extendedProperty.Contains(customerId);
    }).ToList();
Run Code Online (Sandbox Code Playgroud)

我希望能够使用AdClient在ActiveDirectory的一个查询中执行此操作.如果我尝试这个,我会得到错误,不支持这些方法,这是有道理的,因为我假设在后台构建查询以查询Active Directory.

编辑 - 其他信息:

我能够像这样查询Graph API:

var authContext = await ActiveDirectoryClientFactory.GetAuthenticationContext(AuthConfiguration.Tenant,
AuthConfiguration.GraphUrl, AuthConfiguration.ClientId, AuthConfiguration.ClientSecret);
var url = $"https://graph.windows.net:443/hansaborgb2c.onmicrosoft.com/users?api-version=1.6&$filter={customersExtendedProperty.Name} eq '{customerId}'";
var users = await _graphApiHttpService.GetAll<User>(url, authContext.AccessToken);
Run Code Online (Sandbox Code Playgroud)

但是,在我的示例中,我需要使用substringof进行过滤,但Azure Graph API不支持此功能.

c# azure-ad-b2c

13
推荐指数
1
解决办法
906
查看次数

AADSTS700016:在目录“some_another_id”中找不到标识符为“some_id”的应用程序

这是一个错误 img

我需要一个带有自定义策略的联合身份验证(当用户通过身份验证时,我需要他在 b2c 用户中显示为联合身份,而不是其他人或其他我可以用单个租户实现的东西),我以前在 azure 中将默认策略设置为 OpenId提供者,但没有找到如何在自定义策略中使用 OpenId 进行 FEDERATION 身份验证,所以我使用 SAML 和我所拥有的以下内容进行了验证。

我试过单租户,这不是我需要的。问题也不在于签名密钥,因为我已经遇到了这个问题并解决了这个问题。我创建了自签名证书,先将其上传到 AAD 应用程序,然后再上传到 b2c 策略密钥。我认为验证联邦的应用程序不是问题,因为我使用默认策略。

    <TechnicalProfile Id="Office-SAML2">
      <DisplayName>Microsoft Office 365</DisplayName>
      <Description>Login with your ADFS account</Description>
      <Protocol Name="SAML2"/>
      <Metadata>
        <Item Key="WantsSignedRequests">false</Item>
        <Item Key="PartnerEntity">https://login.microsoftonline.com/<b2c tenant id>/federationmetadata/2007-06/federationmetadata.xml</Item>
        <Item Key="XmlSignatureAlgorithm">Sha256</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlCert"/>
        <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlCert"/>
      </CryptographicKeys>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="userPrincipalName" />
        <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name"/>
        <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name"/>
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email"/>
        <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name"/>
        <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="https://sts.windows.net/<b2c tenant id>/" AlwaysUseDefaultValue="true" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
      </OutputClaims>
      <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> …
Run Code Online (Sandbox Code Playgroud)

adfs saml saml-2.0 azure-active-directory azure-ad-b2c

13
推荐指数
2
解决办法
4万
查看次数

在 B2C 自定义策略上启用 Javascript

Javascript 在客户端被禁用,即使我已经按照文档在下面添加了。

<RelyingParty>
  <DefaultUserJourney ReferenceId="B2CSignUpOrSignInWithPassword" />
  <UserJourneyBehaviors>
   <ScriptExecution>Allow</ScriptExecution>
  </UserJourneyBehaviors>
  ...
</RelyingParty>
Run Code Online (Sandbox Code Playgroud)

当我尝试上传自定义策略时,出现错误 - “启用 JavaScript 时请在内容定义中使用页面合同。” 在文档中找不到与此错误相关的任何内容。

尝试使用 datauri 将元数据添加到内容定义中 -

<ContentDefinition Id="api.localaccountpasswordreset">  
  <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
 <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:1.1.0</DataUri>
  ...
 </ContentDefinition>
Run Code Online (Sandbox Code Playgroud)

期望 javascript 在客户端登录页面上工作

azure-ad-b2c

11
推荐指数
1
解决办法
4864
查看次数

Angular Azure Active Directory B2C 身份验证 - CORS 问题

我正在 Angular 中实现 Azure Active Directory B2C 身份验证。我正在使用 msal 拦截器连接 Azure AD B2C。身份验证请求失败并显示错误

CORS 策略阻止了在 ' https://login.microsoftonline.com/ ...' 从源 ' http://localhost/ ...'访问 XMLHttpRequest :没有 'Access-Control-Allow-Origin' 标头存在于请求的资源上。

浏览器控制台截图

我根据这篇文章配置了一切:https : //medium.com/@sambowenhughes/configuring-your-angular-6-application-to-use-microsoft-b2c-authentication-99a9ff1403b3

azure-ad-b2c azure-ad-msal azure-authentication angular

11
推荐指数
1
解决办法
1819
查看次数

如何将 azure b2c 与 react 集成

我正在使用 react,我必须通过 给我的用户登录Azure B2C,所以我正在尝试这样做,但我无法找到如何做到这一点以及是什么。

我试过的

  1. 我从微软网站上得到了这个例子,它是使用纯 JavaScript (vanilla) 完成的,我不知道如何在我的 React 代码中实现它。

所以我试着用一些反应库移动,我谷歌搜索并找到了 这个库

我按照他们所写相同的代码,但是当我打登录按钮,它需要我的蔚蓝登录页面,所以在我的app.js 我做console.log(authentication.getAccessToken());登录它抛出空后,我不知道为什么

我的代码

authentication.initialize({
        // optional, will default to this
        instance: 'https://login.microsoftonline.com/tfp',
        // My B2C tenant
        tenant: 'mytenant.onmicrosoft.com',
        // the policy to use to sign in, can also be a sign up or sign in policy
        signInPolicy: 'B2c_signupsignin',
        // the the B2C application you want to authenticate with (that's just a random GUID - get yours from the portal)
        clientId: 'fdfsds5-5222-ss522-a659-ada22',
        // …
Run Code Online (Sandbox Code Playgroud)

javascript azure reactjs azure-ad-b2c react-hooks

11
推荐指数
1
解决办法
3016
查看次数

MSAL范围(openid profile offline_access).基本的简单配置文件可能无法实现?

MSAL的行为好像在其API库层有一个硬编码的catch 22,当我使用它时似乎不合逻辑.

string[] scopesArrayNonNullWORKS = new string[] { "email" };
string[] scopesArrayAlreadyThereInMsalCalls_FAILS = new string[] { "openid" };
string[] scopesArrayNoExtraScopesNeeded_FAILS = new string[0]; 

Microsoft.Identity.Client.ConfidentialClientApplication myCliApp; 
myCliApp.AcquireTokenByAuthorizationCodeAsync(code, scopesArray);
Run Code Online (Sandbox Code Playgroud)

MSAL内置并在每次调用时对这些范围进行硬编码:openid,profile,offline_access.

这很好,对我有用.我不需要任何额外的范围.

但是,我不能使用null或空范围列表.这就像MSAL库层强迫我要求我不需要或不想要的范围.如果我包含电子邮件(我不需要),那么库层对非null的Scopes参数感到满意,一切正常.

如果我使用我需要的一个范围,openid,那么库层错误,因为我已经包含了一个已经存在的重复范围openid.

这似乎是一个捕获22和周期性不合逻辑.我不能使用我需要的范围,或者它是错误的,因为它们是预定义的.我无法传入一个空的范围列表(并使用预定义的)或它的错误.如果我传入一个我不想要或不需要的非null范围,那么它可以工作.

我必须错过一个关键的概念细节.

我想使用这3个,只有这3个范围... openid,profile,offline_access.

此catch 22的错误示例:MSAL始终发送范围'openid profile offline_access'.它们无法被抑制,因为它们是库运行所必需的.请勿在scope参数中包含任何这些范围.

azure-ad-b2c azure-ad-msal

10
推荐指数
1
解决办法
785
查看次数

将原生Google帐户选择器与B2C结合使用

这比Flutter / android问题更像是Azure B2C问题:

TLDR:我怎样才能得到一个B2C JWT令牌“ eyJhbGciO ...... ”与谷歌的访问令牌“ ya29.Glss ...... ”?

我们正在构建一个具有波动的应用程序,该应用程序使用Azure B2C来管理用户。尽管此方法可与simple_auth配合使用,但我们不是整个“浏览器弹出窗口导航” / chrome自定义标签的忠实拥护者,我们很乐意使用显示本地Google帐户并允许我们获取访问权限的本机google登录插件。来自Google的ID令牌(令牌以“ ya29.Glss ...”开头。但是之后我们应该如何处理这两个令牌?我假设我必须将其发布到B2C上的某个自定义策略/端点上,以便收到B2C令牌(以'eyJhbGciO ...开头)还是我需要从Google请求带有其他一些参数的令牌?

任何帮助,将不胜感激。干杯

android oauth google-signin flutter azure-ad-b2c

10
推荐指数
1
解决办法
222
查看次数

对如何在 Blazor App 中从 B2C 获取访问令牌感到困惑

我有一个配置了 B2C 身份验证的 Blazor 服务器端应用程序。这个应用程序将调用一个 webapi 来与我的服务进行任何数据交换。B2C 身份验证工作正常,直接从模板配置 B2C 身份验证是:

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

这些声明只有我从我的登录策略返回的声明,没有任何我可以用来代表我的 Web api 进行身份验证的访问令牌(也用同一个 B2C 租户保护)。

我已经阅读了大约 100 个不同的文档,但在 blazor 的上下文中似乎没有任何意义。有没有人以前做过这件事可以说明一些问题?

一等奖是在用户第一次向 B2C 进行身份验证后请求访问令牌,然后将令牌保存在缓存中,以便在会话/浏览器打开或访问令牌有效时在 blazor 应用程序中用于任何 api 调用。

似乎这是正确的路径:https : //github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi/blob/master/TaskWebApp/Controllers/TasksController.cs但我什么我不明白的是:

  • 这是 Blazor 的正确方法吗?
  • 如何触发它以获取用户身份验证请求的访问令牌。我不清楚如何覆盖 B2C 身份验证构造函数。
  • 我可以在当前用户的声明中添加访问和刷新令牌,以便我可以在我的应用程序中全局使用 httpcontext 对象来获取执行我的 api 调用所需的令牌吗?
  • 上面文档中的代码当然在控制器中。希望将这种形式作为用户身份验证流程的一部分。
  • 似乎 B2C 身份验证的配置现在非常模板化......例如,我在哪里可以自定义身份验证的路由?我宁愿将用户定向到 /auth 或 /login 而不是 /AzureB2C/Login(为了掩盖明显的身份验证提供程序 url。我知道它会在地址栏中显示给用户......但是嘿......任何将非常感谢帮助将具体说明如何在 Blazor 服务器端处理此问题。

谢谢!

azure azure-ad-b2c blazor blazor-server-side

10
推荐指数
2
解决办法
2562
查看次数