标签: azure-ad-b2c

你如何使用MSAL认证AAD B2C?

我有一个使用ADAL的客户端/服务器身份验证的工作版本.但是,当您想要使用本地帐户(即只是一个用户名或只是一个没有AAD之外的支持身份验证器的电子邮件地址)时,B2C AAD似乎无法与ADAL一起使用.我们应该为本地帐户使用的API似乎是MSAL的alpha版本.到现在为止还挺好.我能够使用Graph API创建本地用户并使用以下代码,我似乎正在验证本地用户'joeconsumer@mycompany.com':

        this.pca = new PublicClientApplication("a4828eaa-42f6-418a-8062-f857130b69ce");
        AuthenticationResult result = await this.pca.AcquireTokenAsync(
            new string[] { "a4828eaa-42f6-418a-8062-f857130b69ce" },
            string.Empty,
            UiOptions.ForceLogin,
            null,
            null,
            "https://login.microsoftonline.com/" + "darkbondpublic.onmicrosoft.com",
            "B2C_1_sign-in");
Run Code Online (Sandbox Code Playgroud)

问题是我使用WCF中的自定义安全令牌机制将安全令牌从'result.Token'传递回服务器.过去使用ADAL的服务器上的代码似乎不再接受上述调用中的安全令牌:

JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
Microsoft.IdentityModel.Tokens.SecurityToken securityToken = null;
ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(userName, this.GetTokenValidationParameters(MetadataAddress), out securityToken);
Thread.CurrentPrincipal = claimsPrincipal;
Run Code Online (Sandbox Code Playgroud)

错误消息是:

在此输入图像描述

谁能告诉我这里发生了什么?我是否需要在服务器上使用不同的身份验证方法?

azure-active-directory azure-ad-b2c azure-ad-msal

0
推荐指数
1
解决办法
1534
查看次数

邀请用户在AD B2C中创建后登录我的应用

遵循本教程, 我可以使用ADAL创建用户,从而使该方案在ADB2C上正常工作。(这是该场景上下文

我的目标是发送用户邀请(电子邮件)以使他加入我的appp。

我发现在graph.microsoft.com(MS图而不是AD图)上,有一个可用于此目的的邀请管理器,并且可能是如果您在B2C Azure门户上创建用户时触发邀请的方式。

  • 那么,是否需要为我的应用程序授予权限(与在AD图上获取访问令牌来管理用户的方法相同)?
  • 我是否应该以与AD相同的方式获取MS图上的令牌

    var authenticationContext = new AuthenticationContext(AuthString,false);
    var clientCred = new ClientCredential(ClientId,ClientSecret);
    var authenticationResult = authenticationContext.AcquireTokenAsync(ResourceUrl,clientCred);
    var令牌= authenticationResult.Result.AccessToken;

    这一次ResourceUrl指向https://graph.microsoft.com

这是我的OwinOpenID AuthenticationCodeReceived回调:

AuthorizationCodeReceived = async (context) =>
{
    // get authentication context
    string userObjectID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
    AuthenticationContext authContext = new AuthenticationContext($"https://login.microsoftonline.com/{AuthenticationHelper.Tenant}", new NaiveSessionCache(userObjectID));


    ClientCredential credential = new ClientCredential(AuthenticationHelper.ClientId, AuthenticationHelper.AppKey);
    AuthenticationResult result = await authContext.AcquireTokenAsync("https://graph.windows.net", credential);
    // ----> Token used on the authorization header for AD user management and work properly …
Run Code Online (Sandbox Code Playgroud)

azure azure-ad-b2c

0
推荐指数
1
解决办法
624
查看次数

如何在 Azure AD B2C 中添加已发布范围

很难操作 Azure AD B2C 范围。我们需要什么样的权限才能做到这一点?

在此处输入图片说明

我在网上找到的那个人正在编辑它。

在此处输入图片说明

azure azure-active-directory azure-ad-b2c

0
推荐指数
1
解决办法
655
查看次数

将现有的 b2c 租户链接到我的 azure 订阅但无法创建资源?

出现错误您当前登录到没有任何订阅的“Azure AD B2C 租户”目录。当我尝试在 Azure AD B2C 中创建资源时。

请帮助我是 Azure 的新手

azure azure-active-directory azure-ad-b2c

0
推荐指数
1
解决办法
1400
查看次数

刷新 Azure AD B2C 自定义策略中的令牌吊销

我已经提出了刷新令牌撤销问题,它会在 1-5 分钟后起作用。
但它仅适用于内置策略(用户流),不适用于自定义策略。

我从内置策略中获得了refresh_token A,从自定义策略中获得了refresh_token B。

同一租户中的同一用户会收到这两个令牌。

执行撤销(Graph API)后,当我尝试使用refresh_token A获取新的访问和刷新令牌时,它失败了。但是当我尝试使用refresh_token B(通过自定义策略接收)时,它仍然有效。能够获得新的代币。

我在撤销呼叫后给了 15 分钟的时间间隔。

请帮我解决这个问题。

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

0
推荐指数
1
解决办法
1635
查看次数

将 Azure AD B2C 配置为 Salesforce 中的身份验证提供商

我正在尝试将 Azure AD B2C 配置为 Salesforce 的身份验证提供程序。我按照http://salesforce.vidyard.com/watch/kcgTXQytUb6INIs2g3faKg中的说明进行操作(而不是使用 Google Azure AD B2C)。 在此输入图像描述

当我单击仅测试初始化​​ URL 时,出现以下错误

在此输入图像描述

我的 B2C 设置非常基本。我只有一个电子邮件提供商和一个开箱即用的登录注册策略。

任何帮助将不胜感激。

salesforce openid-connect azure-ad-b2c

0
推荐指数
1
解决办法
3245
查看次数

Azure B2C:Microsoft Graph API - InvalidAuthenticationToken

/me从 iOS 登录 Azure B2C Active Directory 后,我尝试调用Microsoft Graph API。

使用以下示例应用程序:https : //github.com/Azure-Samples/active-directory-b2c-ios-swift-native-msa我替换了常量,以便注册和登录工作。我已经设置kGraphURIhttps://graph.microsoft.com/v1.0/me. 代码如下所示:

let kTenantName = "mytenant.onmicrosoft.com"
let kAuthorityHostName = "mytenant.b2clogin.com"
let kClientID = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
let kSignupOrSigninPolicy = "B2C_1A_signup_signin"
let kGraphURI = "https://graph.microsoft.com/v1.0/me"
let kScopes: [String] = ["https://mytenant.onmicrosoft.com/api/user_impersonation"]
Run Code Online (Sandbox Code Playgroud)

的值kScopes设置为我的应用程序唯一可用的 API,它是作为设置用户策略的说明的一部分创建的。

当我尝试打电话时,https://graph.microsoft.com/v1.0/me我回来了:

{ "error": { "code": "InvalidAuthenticationToken", "message": "访问令牌验证失败。", "innerError": { "request-id": "e923673f-25cb-44be-b3b9-94eda660d4f6", "日期": "2020-02-11T08:31:24" } } }

如果我尝试设置kScopeshttps://graph.microsoft.com/User.Read我得到一个错误:

无法获取令牌:错误域=MSALErrorDomain Code=-50000 "(null)" UserInfo={MSALErrorDescriptionKey=收到的身份验证响应没有预期的 accessToken, MSALInternalErrorCodeKey=-42008, …

azure-active-directory azure-ad-b2c azure-ad-msal

0
推荐指数
1
解决办法
1000
查看次数

Azure AD B2C 与 Azure AD 多租户 - 始终选择 MS 帐户登录的选项?

我正在使用此处找到的 Azure AD 多租户自定义策略和 Azure B2C 进行登录。我遇到的问题是,当单击登录按钮时,系统过于渴望登录用户。我的意思是,如果加载并找到了一个 Azure AD Cookie,则 B2C 会尝试立即登录该用户,如果不是由自定义策略授权的 Azure AD 租户,则 B2C 会将其循环回来到登录屏幕。

我的 cookie 知识基于此处的图表: https: //learn.microsoft.com/en-us/azure/active-directory-b2c/session-overview(如果我错了,请纠正我)。

我知道要解决这个问题,我们可以访问 Portal.office.com 并登录,这会设置另一个 cookie,然后返回 B2C 时,用户再次登录,并会看到帐户选择器屏幕,并且可以选择授权一。

我想做的是始终为他们提供此选项来选择他们登录的帐户,以避免出现此问题。我注意到在https://portal.azure.com上登录时,我总是(或几乎总是)看到 帐户选择器屏幕

有没有办法将此屏幕添加为用户旅程/自定义策略的一部分?我可以点击一个端点来显示此屏幕吗?

azure azure-active-directory azure-ad-b2c

0
推荐指数
1
解决办法
1022
查看次数

Azure B2C:Asp.Net Web API 调用 Asp.Net Web.API

我有两个 Web API 服务(源和目标)。每个都使用客户端密钥在 Azure B2C 中注册为 AD 应用程序。

我正在尝试调用从源服务到目标服务 API 的 gRPC API 调用,但是当我尝试进行调用时,出现 gRPC 异常,表明源未经身份验证。

注意:当我从目标 WebAPI 中删除范围策略和授权属性时,一切正常,但当然这是不安全的。

在源服务启动中我有以下内容......

注意:源和目标的配置设置都是正确的。我已经三次检查所有配置设置是否正确。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApi(options =>
    {
        Configuration.Bind("AzureAdB2C", options);
        options.TokenValidationParameters.NameClaimType = "name";
    },
    options =>
    {
        Configuration.Bind("AzureAdB2C", options);
    });
Run Code Online (Sandbox Code Playgroud)

我不确定是否需要,但我还在源 API 的启动中包含了以下逻辑。

注意:我现在已经对所需的范围进行了硬编码。

services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C")
    .EnableTokenAcquisitionToCallDownstreamApi(new string[] { "https://nextwaredev.onmicrosoft.com/nextware.productportal.sharedservices.api/sharedservices_readaccess", "https://nextwaredev.onmicrosoft.com/nextware.productportal.sharedservices.api/sharedservices_readwriteaccess" })
    .AddInMemoryTokenCaches();
Run Code Online (Sandbox Code Playgroud)

目标服务具有正确的策略,并且两个服务都配置为使用授权和身份验证。

app.UseAuthentication();
app.UseAuthorization();
Run Code Online (Sandbox Code Playgroud)

我已经根据上面的相同范围添加了源所需的 API 权限。

在此输入图像描述

当我尝试调用目标 API 上的方法时,我收到一个 gRPC 异常,表明源未经身份验证。

因此,我想也许我需要传递应用程序访问令牌,但是当我尝试获取 JWT 访问令牌时(以下示例 调用 tokenAcquisition.GetAccessTokenForAppAsync),我收到另一个异常“AADB2C90086:不支持提供的 grant_type [client_credentials]。 ”

注意:我有一个 Blazor 应用程序,调用相同的安全 API 时没有任何问题。不过,我调用 GetAccessTokenForUserAsync... ,它返回正确的令牌,并具有调用相同下游源或目标 Web api 服务所需的应用范围。 …

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

0
推荐指数
1
解决办法
1355
查看次数

具有 SAML2 B2C 自定义策略的查询字符串声明解析器

是否可以从 SAML2 依赖方请求中读取自定义查询字符串参数?

使用 {OAUTH-KV:any custom query string} 不起作用。

例子:

https://mytest.b2clogin.com/mytest.onmicrosoft.com/B2C_1A_TEST_SAML/samlp/sso/login?myparameter=true

我需要将“myparameter”值读入声明中。

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

0
推荐指数
1
解决办法
1320
查看次数

Azure B2C 自定义策略 - 有没有办法在 ClaimsProviderSelection 编排步骤中显示声明

我目前正在为我的身份验证流程使用 Azure B2C 自定义策略。

我有一个 ClaimsProviderSelection 编排步骤,向用户显示两个选项:

  1. 将代码发送到身份验证方法中保存的 MFA 电子邮件
  2. 丢失电子邮件

我想做的是通过在显示文本或按钮本身中使用 ClaimProvider 来显示用户的电子邮件地址(见下文)

在此输入图像描述

如果这是不可能的,那么我希望能够在验证控制页面本身上添加一个“丢失的电子邮件”按钮 - 如下所示:

在此输入图像描述

但从我所看到的情况来看,这似乎仅适用于“ForgotPasswordExchange”(如下所示: https: //learn.microsoft.com/en-us/azure/active-directory-b2c/add-password-reset- policy?pivots=b2c-custom-policy)用于密码而不是身份验证方法。


如果任何人有任何自定义 ClaimsProviderSelection 步骤或在编排步骤上添加自定义链接的经验,我们将非常感谢您的帮助!

请参阅下面的代码示例:

编排步骤:

<OrchestrationStep Order="2" Type="ClaimsProviderSelection" ContentDefinitionReferenceId='api.MFAselections' >
  <Preconditions>
    <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
      <Value>strongAuthenticationEmailAddress</Value>
      <Value>strongAuthenticationPhoneNumber</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsProviderSelections>
    <ClaimsProviderSelection TargetClaimsExchangeId="MFAVerifyEmailAddress" />
    <ClaimsProviderSelection TargetClaimsExchangeId="LostEmailExchange" />
  </ClaimsProviderSelections>
</OrchestrationStep>
Run Code Online (Sandbox Code Playgroud)

技术简介:

<TechnicalProfile Id="MFA_VerifyEmailAddress">
  <DisplayName>SEND TO {Claim:strongAuthenticationEmailAddress} 
  </DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ContentDefinitionReferenceId">MFAVerifyEmail</Item>
    <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
    <!-- <Item Key="setting.showContinueButton">false</Item> -->
    <Item Key="setting.showCancelButton">false</Item>
    <Item Key="UserMessageIfSessionDoesNotExist">You have exceeded …
Run Code Online (Sandbox Code Playgroud)

azure azure-active-directory azure-ad-b2c azure-ad-b2c-custom-policy

0
推荐指数
1
解决办法
1236
查看次数

Azure AD B2C 自定义密码重置策略不会使用 + char\sign 验证电子邮件

用户可以使用 Azure AD B2C 以及包含+. 但是,当单击登录页面上的“忘记密码”链接并输入带有字符的电子邮件时,+会显示以下错误:

在此输入图像描述

我在 Azure 的反馈网站上看到了 2 个相关问题:

允许加号登录电子邮件地址[ 用户Naud van Onna有一条评论与此问题匹配。]

我也看到在电子邮件地址中使用“+”符号成功注册。不幸的是,使用带有“+”符号的电子邮件地址时,密码重置功能无法正常工作。

支持电子邮件中的加地址,这对于测试非常有价值[在这一篇中提到了描述我们情况的电子邮件sub-addressing功能。我们使用+电子邮件地址来测试我们的应用程序。]

自定义策略文件中是否有任何位置.xml可以输入自定义正则表达式来验证此电子邮件地址并允许签名+

<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">TrustFrameworkBase.xml文件中看到了但我不知道在哪里修改它......

<!-- This technical profile forces the user to verify the email address that they provide on the UI. Only after email is verified, the user account is
        read from the directory. -->
        <TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
.
.
.
Run Code Online (Sandbox Code Playgroud)

regex email-validation forgot-password reset-password azure-ad-b2c

-1
推荐指数
1
解决办法
1994
查看次数