我有一个使用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)
错误消息是:
谁能告诉我这里发生了什么?我是否需要在服务器上使用不同的身份验证方法?
遵循本教程, 我可以使用ADAL创建用户,从而使该方案在ADB2C上正常工作。(这是该场景的上下文)
我的目标是发送用户邀请(电子邮件)以使他加入我的appp。
我发现在graph.microsoft.com(MS图而不是AD图)上,有一个可用于此目的的邀请管理器,并且可能是如果您在B2C Azure门户上创建用户时触发邀请的方式。
我是否应该以与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 AD B2C 租户”目录。当我尝试在 Azure AD B2C 中创建资源时。
请帮助我是 Azure 的新手
我已经提出了刷新令牌撤销问题,它会在 1-5 分钟后起作用。
但它仅适用于内置策略(用户流),不适用于自定义策略。
我从内置策略中获得了refresh_token A,从自定义策略中获得了refresh_token B。
同一租户中的同一用户会收到这两个令牌。
执行撤销(Graph API)后,当我尝试使用refresh_token A获取新的访问和刷新令牌时,它失败了。但是当我尝试使用refresh_token B(通过自定义策略接收)时,它仍然有效。能够获得新的代币。
我在撤销呼叫后给了 15 分钟的时间间隔。
请帮我解决这个问题。
我正在尝试将 Azure AD B2C 配置为 Salesforce 的身份验证提供程序。我按照http://salesforce.vidyard.com/watch/kcgTXQytUb6INIs2g3faKg中的说明进行操作(而不是使用 Google Azure AD B2C)。

当我单击仅测试初始化 URL 时,出现以下错误
我的 B2C 设置非常基本。我只有一个电子邮件提供商和一个开箱即用的登录注册策略。
任何帮助将不胜感激。
/me从 iOS 登录 Azure B2C Active Directory 后,我尝试调用Microsoft Graph API。
使用以下示例应用程序:https : //github.com/Azure-Samples/active-directory-b2c-ios-swift-native-msa我替换了常量,以便注册和登录工作。我已经设置kGraphURI为https://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" } } }
如果我尝试设置kScopes为https://graph.microsoft.com/User.Read我得到一个错误:
无法获取令牌:错误域=MSALErrorDomain Code=-50000 "(null)" UserInfo={MSALErrorDescriptionKey=收到的身份验证响应没有预期的 accessToken, MSALInternalErrorCodeKey=-42008, …
我正在使用此处找到的 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上登录时,我总是(或几乎总是)看到 帐户选择器屏幕。
有没有办法将此屏幕添加为用户旅程/自定义策略的一部分?我可以点击一个端点来显示此屏幕吗?
我有两个 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 服务所需的应用范围。 …
是否可以从 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 B2C 自定义策略。
我有一个 ClaimsProviderSelection 编排步骤,向用户显示两个选项:
我想做的是通过在显示文本或按钮本身中使用 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
用户可以使用 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