我们正尝试使用implict流程实现Azure AD B2C身份验证.我们可以登录并成功重定向到正确的网址,其中包含重定向网址(id_token和代码)上的正确项目.然而,正如本文建议(https://github.com/Azure/azure-content/blob/master/articles/active-directory-b2c/active-directory-b2c-reference-oidc.md#get-a-token然后,应用程序需要对令牌端点执行xhr POST请求,以检索应用程序需要与之交互的资源(web api)的令牌.然而,当我尝试做一个XHR POST到令牌端点(https://login.microsoftonline.com/ {}租户/oauth2/v2.0/token?p=b2c_1_signinpolicy)浏览器(相当正确地)执行预检检查(OPTIONS调用)以确定它是否可以调用端点,因为它位于不同的域上.OPTION调用有效,但它不包含浏览器允许POST调用端点所需的头文件(Access-Control-Allow-Origin).
我错过了什么或做错了什么?
任何帮助赞赏!
乔恩
Microsoft 最近向 Azure AD B2C 添加了新的“注册或登录”策略。
默认情况下,当我们将用户定向到该页面时,它会显示登录工作流程。
有时我可能想将用户直接带到注册工作流程。
当内容完全相同时,我不想配置两个策略(即上传相同的横幅、模板、背景、重定向、特殊消息等)。
是否可以传递一个参数(或一些超凡脱俗的技巧),以便它显示“注册”工作流程?
我正在尝试使用Sample Graph API应用程序来更改用户的密码,但我得到了:
调用Graph API响应时出错:
{
"odata.error": {
"code": "Authorization_RequestDenied",
"message": {
"lang": "en",
"value": "Insufficient privileges to complete the operation."
}
}
}
Run Code Online (Sandbox Code Playgroud)
图形API请求:
PATCH /mytenant.onmicrosoft.com/users/some-guid?api-version=1.6 HTTP/1.1
client-request-id: ffd564d3-d716-480f-a66c-07b02b0e32ab
date-time-utc: 2017.08.10 03:04 PM
Run Code Online (Sandbox Code Playgroud)
JSON文件
{
"passwordProfile": {
"password": "Somepassword1$",
"forceChangePasswordNextLogin": false
}
}
Run Code Online (Sandbox Code Playgroud)
我已经测试过更新用户displayName,并且工作正常.
{
"displayName": "Joe Consumer"
}
Run Code Online (Sandbox Code Playgroud)
AD应用程序权限
oauth-2.0 azure-active-directory azure-ad-graph-api azure-ad-b2c
如果声明存储在自己的服务器上某个位置(在B2C中不可用),那么在Azure AD B2C中将自定义声明(用户订阅或角色列表作为示例)包含在令牌中的方法有哪些?目标是在令牌中提出索赔,以避免在每次请求时额外往返存储.
对该主题的调查使我有以下方式:
通过Graph API添加自定义属性,配置为包含在JWT中.属性值应与我们的数据存储保持同步.
自定义登录策略,如本文https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-rest-api-step-custom,但如果我说得对,附加步骤6是以非限制方式访问公开API的用户之旅(请求不是通过秘密保护,可能用于通过呈现的UserId获取用户声明)?
IdentityServer4联合网关http://docs.identityserver.io/en/release/topics/federation_gateway.html允许在发布之前添加任何声明.
我们正在使用AD B2C在我们的Web应用程序上进行身份验证。上周,当我们调用托管在Azure中并由Active Directory使用AD B2C租户锁定的API时,我们开始收到403.76。
更改发生时,我们尚未更改AD中的任何配置设置。我们回滚了所有没有帮助的代码。我们验证了我们的令牌在jwt.io中有效。我们确认观众是正确的,并且在应用程序注册中已正确设置了权限。进入功能应用程序的“诊断和解决问题”部分并深入研究4xx错误时,我们可以看到简单身份验证错误403.76。
该功能应用程序仅对Cosmos执行GetAsync以使您的用户个人资料登录。但是我们还没有走得太远,因为在用AD验证令牌时收到403.76。
我们应该能够像以前一样对我们的API进行GET并接收数据。相反,我们获得HTTP状态403和76的子状态。
“诊断和解决问题”部分中的错误:
EasyAuth:AuthorizationCheckFailed。有关更多详细信息,请参阅EasyAuth模块的HTTP状态代码。
c# azure azure-active-directory azure-ad-b2c azure-functions
我正在尝试在我的应用程序中处理“重置密码”用户流程。单击“忘记密码”链接后,成功触发了 OnRemoteFailure OpenId 事件,成功重定向到指定的 url 'Home/ResetPassword',但不是重定向到 ADB2C 重置密码屏幕,而是重定向回登录/登录上页。
注册/登录策略成功运行,但根据 Microsoft 文档:https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-policies:
"使用本地帐户注册或登录的用户流程在体验的第一页包含忘记密码?链接。单击此链接不会自动触发密码重置用户流程。
相反,错误代码 AADB2C90118 会返回到您的应用程序。您的应用程序需要通过运行重置密码的特定用户流来处理此错误代码。要查看示例,请查看一个简单的 ASP.NET 示例,该示例演示了用户流的链接。”


protected virtual Task OnRemoteFailure(RemoteFailureContext context)
{
context.HandleResponse();
// Handle the error code that Azure AD B2C throws when trying to reset a password from the login page
// because password reset is not supported by a "sign-up or sign-in policy"
if (context.Failure is OpenIdConnectProtocolException && context.Failure.Message.Contains("AADB2C90118"))
{
// If the …Run Code Online (Sandbox Code Playgroud) 我有一个 Web 应用程序,必须向 API 发送 B2C Bearer 令牌才能获得授权。我通过使用 MSAL 实现了这一点,一切正常,直到我重新启动 Web 应用程序,一旦重新启动 Web 应用程序(不注销),应用程序似乎仍然可以找到 B2C 声明,并且用户仍然处于登录状态,但是IConfidentialClientApplication 无法使用 GetAccountAsync(),因为找不到帐户。
我得到的错误是:{“没有帐户或登录提示传递给 AcquireTokenSilent 调用。”}
如果用户注销,问题即可解决。这种情况发生在本地主机上,如果应用程序是通过 Azure 发布的并且我重新启动应用程序服务,也会发生这种情况。
我正在尝试更新identitiesAzure AD B2C 租户中现有用户的集合。federated具体来说,我正在尝试为用户添加另一个身份条目。
根据Microsoft Graph 文档,这应该是可能的,前提是我:
User.ManageIdentities.All向我用来进行图形调用的客户端分配权限userPrincipalName也在请求中发送)我已在 B2C 租户中注册了一个应用程序,并为其分配了访问 Microsoft Graph 的特定权限。我正在使用客户端凭据流程来获取具有声明中适当权限的访问令牌roles。我可以成功获取访问令牌,并通过检查颁发的 JWT 确认是否存在所需的权限。
我还使用Microsoft.Graph SDK从 C# 代码调用图 v1.0 端点。我正在尝试更新一个现有用户,该用户具有众所周知的 userId (objectId)。使用访问令牌,GraphServiceClient我可以成功检索用户。例如,下面的代码可以正常工作
var user = await client.Users[userId].Request()
.Select(o => new { o.Id, o.DisplayName, o.Identities })
.GetAsync();
Run Code Online (Sandbox Code Playgroud)
检索用户后,我尝试向该用户的属性添加另一个条目identities,并为该用户发出更新图调用。请注意,SDK 要求更新调用仅使用本地创建的对象,即您无法发送之前通过 SDK 获取的现有对象。
我的完整更新代码如下
async Task TryUpdateUser(GraphServiceClient client, string userId)
{
var user = await client.Users[userId].Request()
.Select(o => new { o.Id, o.DisplayName, o.Identities …Run Code Online (Sandbox Code Playgroud) 我已经按照这篇文章配置了 Azure AD 多租户身份验证:https ://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-azure-ad-multi-tenant-custom ?标签=应用程序
身份验证在上周星期五有效,但现在突然失败。我尝试使用两端添加的新 App Id 和新 App 机密在 Azure AD 中重新注册该应用程序。
我得到的错误:
抱歉,我们在登录时遇到问题。AADSTS9002325:跨域授权代码兑换需要代码交换证明密钥。
我是否忽略了一些明显的东西?
身份验证与使用 React 和react-aad-msal的 SPA Web 应用程序一起使用
是否可以通过编程方式创建Azure AD B2C租户(例如,使用Powershell,REST API)?
我们正在开发一个多租户SaaS解决方案,我们希望在新租户注册时自动创建Azure B2C租户.
azure-ad-b2c ×10
azure ×4
c# ×2
asp.net-core ×1
bearer-token ×1
c#-3.0 ×1
javascript ×1
oauth-2.0 ×1
openid ×1