问题标签 [microsoft-identity-platform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
424 浏览

azure - 如何从 azure 活动目录 (V2) 获取访问令牌以允许访问 Azure 服务总线?

我一直在关注本教程以获取 azure 服务总线的访问令牌,以便我可以使用 Postman 将消息发布到队列:

https://docs.microsoft.com/en-us/rest/api/servicebus/get-azure-active-directory-tokenTh

通过作品遵循示例,我可以获得访问令牌。但是,该示例使用较旧的 v1 令牌端点,例如

https://login.microsoftonline.com/{{tennant-id}}/oauth2/token

我想使用当前的 v2 端点,例如

https://login.microsoftonline.com/{{tennant-id}}/oauth2/v2.0/token

但是当我切换得到这个错误:

我假设范围的名称必须已更改,并且我找不到有关 azure 服务的范围的任何文档。我尝试了很多东西,例如https://servicebus.windows.nethttps://myqueue.servicebus.windows.net和谷歌搜索,但我什么也没找到。

更新

根据提供的答案,我已将“.default”附加到请求的范围。这并没有解决问题,但改变了我现在在邮递员控制台中收到错误消息:invalid_client。

我正在尝试使用邮递员“获取新的访问令牌”功能并将其设置为这样

[邮递员截图1

更新 2

上次更新中的授权类型错误 - 应该是客户端凭据,然后它将起作用。

0 投票
1 回答
667 浏览

blazor - AzureADB2C GetAccessTokenForUserAsync 错误“请求中提供的范围'user.read'不受支持”

我正在尝试创建一个与 Microsoft Graph API(特别是 OneDrive)集成并使用 Azure AD B2C 进行身份验证的 Blazor 应用程序。

我正在使用 Microsoft.Identity.Web 0.3.1-preview

Setup.cs 如下:

然后服务使用 ITokenAcquisition请求令牌,如下所示:

我正在使用 Microsoft 链接帐户进行身份验证,并且可以在 AuthenticationStateProvider 中看到 live.com 声明。

将基本 user.read 传递给 GetAccessTokenForUserAsync 会导致异常“请求中提供的范围 'user.read' 不受支持”。我尝试将范围指定为https://graph.microsoft.com/user.read但这只是返回 null。

任何建议将不胜感激。

0 投票
0 回答
234 浏览

authentication - 了解和使用 Microsoft 标识

背景:作为创办我的软件公司的一部分,我正在开发我的第一个企业软件解决方案。我正在.NET Core 上开发。

我一直在阅读有关身份验证与授权、AzureAD、托管身份服务器等的所有 Microsoft 文档。

我正在努力理解在 OAuth 2.0 的现代环境中围绕用户的一些更大的设计理念和策略,其中另一个服务对用户进行身份验证并发回声明。

当前状态:目前,我可以通过 Microsoft 帐户使用 Blazor 和 AzureAD 登录。当用户登录时,我会HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier)在请求中使用他们的用户标识符,这可能有其他声明,例如他们的姓名或电子邮件。因为我没有使用用户数据存储在本地数据库中的身份托管。

有关与 Microsoft Identity / AzureAD 交互的问题

  1. 如果我希望在用户登录后执行代码,使用他们的登录数据,应该怎么做?一个示例用例:用户有一个与其帐户关联的“主题”。他们登录,我希望在登录后运行将主题应用到 DOM 中的代码
  2. 用户数据建模?由于用户使用另一个说“是的,此人已通过身份验证”的服务进行身份验证,因此我的服务基本上没有关于他们的信息。我想存储与NameIdentifier我从身份验证服务返回的相关信息,以便我可以为这个人建立一个“个人资料”。一个用例是:

Taylor White 登录 Enterprise News Service Inc.。他对一篇文章发表评论,评论以string UserId和 保存string CommentContent。但是,当有人阅读那篇文章时,我想提取有关 Taylor 的信息,例如他的姓名和照片,但我目前没有任何数据库对用户进行建模或存储我从身份提供者那里获得的声明。

简而言之,关于这些场景,我缺少什么?

  • 成功登录后执行一些逻辑
  • 存储来自身份提供者的用户数据并在其他上下文中访问它的最佳实践,例如加载来自不同用户的评论。

附加信息:

  • 我将 Blazor WebAssembly 用于我的前端,它也在 .NET 上运行。
  • 我正在使用 .NET Core 后端。
0 投票
1 回答
152 浏览

asp.net-core-2.1 - 在我们的解决方案中将 Azure AD 与现有用户帐户相结合

我一直在遵循 Microsoft Identity Platform 文档中的步骤,以在我们现有的 Angular SPA 上启用 Azure AD 身份验证,并将 .Net Core 2.1 API 作为后端。

https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-overview

基础知识现在正在工作,但我有一个问题我无法找到一个好的答案。

在我们当前的系统中,我们有一个现有的用户和权限模型,我需要保留它。接近我们可以设置的 2.000 个不同的用户权限,并且 User 对象在我们的模型中被广泛使用。

因此,我需要将 Azure AD 帐户与我们上下文中的给定用户对象结合起来。

我们现有的身份验证解决方案将用户标识符作为 JWT 中的声明 - 当在 API 中验证令牌时,我可以使用该声明在请求上设置当前用户上下文。

最明显的解决方案是在 Azure 返回的 id-token 中使用“preferred_username”声明。所以在 API 方面,在 JWT 身份验证验证了令牌之后,我更改了我的 SetCurrentUserMiddleware 中的逻辑,以根据 AzureAD 电子邮件查找用户 - 并基于此设置用户上下文。中间件类的片段

对我的好处是:

  • 当我们系统中的管理员创建新用户时,管理员很容易找到与用户帐户关联的电子邮件,从而进行耦合。
  • 该电子邮件已在 MS 的登录过程中使用 - 因此必须假定为唯一的。
  • 客户只需使用正确的配置(在 Azure 和我们的应用程序中)在 Azure 应用程序注册中注册我们的应用程序,然后它就可以工作了。

我们的解决方案以各种方式部署。有些客户由我们托管,每个客户在不同的域上,有些客户在内部部署

现在出现的问题是,这是否是首选方式,以及这是否是一种安全的方式。

或者是否有更好的替代方法将 Azure 广告/身份平台与本地用户数据库进行映射。

我希望有人有一些提示,或者一些好的资源来指向我。

最好的问候/安德斯

0 投票
1 回答
105 浏览

jwt - 使用 MS 身份平台创建我自己的 AccessToken

我正在扩展我们产品上的登录选项以支持 MS 身份平台,以便能够使用 Azure AD 登录(并获得 SSO/MFA) 目前我们正在使用 .Net Core + JWT (JwtBearerDefaults.AuthenticationScheme)环境是 Angular 客户端、.Net Core APA 和后端数据库。

我有设置工作。

我的挑战是,在我们的业务模型和后端数据库中,我们有大约 2.000 个用户权限和我们自己的用户/角色模型授予访问权限。

我目前正在从 MSAL 获取 IdToken,并在我的概念证明中使用 oid 将 Azure ID 与我们的用户模型耦合。

但是,在我们现有的 JWT 解决方案中,我们的访问令牌包含有关用户 ID、角色以及确定访问权限的另一个属性(单元/船舶)的声明。从这三个属性中,我们可以根据 API 端的 2.000 个用户权限来验证请求是否被允许。

我想将此信息(用户、角色、单位)保留在令牌中 - 但对如何保留有疑问。

约束:

  • 我们无法创建/使用 Azure 声明。我们有太多,客户将管理 Azure 应用程序——而我们为每个版本的软件创建、添加、删除权限。
  • Azure 不知道角色/单位数据 - 每个客户的这些数据都不同 - 因此信息也不能在 Azure 中。

下面概述了我的最佳想法 - 这种方法是否正确,并且符合分离 ID/Access 的方式?

我希望有人可以给我一些反馈。

我的想法是,Angular 客户端获取 Azure IDToken。然后我使用 Azure IDToken,调用我们的 API,它在服务器端验证 ID 令牌,然后授予我一个访问令牌,其中包含用户、角色和单位。这个令牌根本不是 Azure 的,只是我们的 API 生成的一个令牌——这也是唯一一个验证它的令牌)。Pro 对这种方法的看法是,无论 Azure 或我们自己的 API 提供哪种 IDToken,我都可以保留一种访问令牌。

试图在此 DrawIO 图中概述以下流程。 Azure/API 身份验证流程

我希望在 Token 领域有更多经验的人可以验证这是否是一种可行的方法?

最好的问候/安德斯

0 投票
1 回答
2012 浏览

c# - 如何为我的 React/.NET Core 3.0 SPA Web 应用程序添加 Microsoft Identity/Azure AD 登录功能

我正在开发一个带有 ReactJS 前端和 .NET Core 3.0 后端的 Web 应用程序。为了创建它,我几乎遵循了本教程:https ://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-3.0 。

目前,我将用户存储在 Azure 云中托管的数据库中。在 Startup 类的后端代码的 ConfigureServices() 方法中,我连接到我的数据库,如下所示:

services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

现在,管理层希望进行更改,以便用户不会存储在我们自己的数据库中,而是存储在 Microsoft Identity(以前称为 Azure Active Directory (Azure AD))中。这是因为许多公司已经在那里拥有用户帐户,他们不必创建新用户。

有人能告诉我如何从现在的位置过渡到那个目的地吗?我看到一些教程,我从头开始创建这样的 Web 应用程序,但我觉得我可以只更改我已经拥有的几行代码并进行更改。任何人?

0 投票
1 回答
1125 浏览

asp.net-core - 通过带有 ASP.NET Core 的 MS Graph 获取 Azure AD 组的异常

我想在用户登录时检索分配给登录用户的所有组。以便这些组可用于用户的登录会话。

我按照下面链接中的代码,

https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/5-WebApp-AuthZ/5-2-Groups

并修改为GetMyMemberOfGroupsAsync()如下所示的调用,但在底部显示异常。

下面是添加到代码示例中以获取所有组的代码,但在_graphServiceClient.Me.MemberOf.Request().GetAsync();

下面的异常被抛出_graphServiceClient.Me.MemberOf.Request().GetAsync();

0 投票
0 回答
81 浏览

blazor-webassembly - 我可以将 Blazor Wasm Standalone 与 Microsoft.Identity.Web 一起使用吗

我有一个简单的问题,我可以在 Blazor 独立应用程序上使用 Microsoft.Identity.Web 库吗?

我已经下载了 MIW 库 ( microsoft.identity.Web.ProjectTemplates-1.0.0) 的模板包,Blazor 独立版 (blazorwasm2) 不使用 MIW 库,但 Blazor 服务器版可以。

0 投票
5 回答
11054 浏览

c# - IDW10201:在不记名令牌中找不到范围或角色声明

我有一个类似于此示例的 ASP.NET Core 3.1 项目:在 WPF 桌面应用程序中使用 Microsoft 身份平台登录用户并调用 ASP.NET Core Web API

我使用的是Identity web1.0 版和 Azure AD,单租户应用程序。

我编辑了清单添加appRoles,因为我只请求应用程序令牌,而不是用户令牌:

我还启用了idtyp访问令牌声明,以指定这是一个应用程序令牌。:

以下请求是通过 Postman 提出的。请注意与范围有关的使用,它在与客户端凭据授予流程/.default相关的文档中提到。

该请求返回一个access_token可以使用jwt.ms查看的内容,如下所示,出于安全原因,实际数据已被占位符替换。:

我注意到上面的令牌不包括scp. 这似乎是正确的,因为这是应用程序令牌而不是用户令牌。相反,它包含“角色”,作为应用程序令牌的适用。

现在access_token可以在 Postman Get 中用作承载:

对此请求的响应是500 internal error。即有什么问题。看起来像一个正确的access_token应用程序令牌,所以错误似乎在 ASP.NET Core 3.1 控制器端。

ASP.NET 核心 3.1。托管自定义 API 的项目,startup.cs其中包含以下代码:

appsettings.json项目包括:

...控制器看起来像这样:

的根本原因500 internal error是抛出了这个异常:IDW10201: Neither scope or roles claim was found in the bearer token.异常。

更新:

(有关更多详细信息,请参阅下面的答案)。

这段关于“使用 Microsoft 标识平台在您的应用程序中实现授权 - 2020 年 6 月”的视频表明缺少的部分是JwtSecurityTokenHandler.DefaultMapInboundClaims = false;需要设置的这个标志startup.cs- 例如:

0 投票
1 回答
668 浏览

azure-ad-b2c - 使用模板中的 services.AddSignIn(Configuration, "AzureAdB2C") 时,“IServiceCollection”不包含“AddSignIn”的定义

我从AzureAD/microsoft-identity-web为 Razor Pages 运行了模板:

哪个创建了一个项目使用

但我查看了 .csproj 文件并看到:

所以我升级了它们,因为它看起来像Microsoft.Identity.Web 的新版本是 1.0.0 的 GA'd。现在这一行:

有这个错误:

“IServiceCollection”不包含“AddSignIn”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“AddSignIn”(您是否缺少 using 指令或程序集引用?)