问题标签 [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 回答
504 浏览

java - Microsoft Graph Identity Java - 租户“Microsoft 服务”中不存在所选用户帐户

我想在我的 Java 应用程序中访问用户的 Outlook 日历。为此,我正在尝试使用 Microsoft Graph API。

我正在关注本教程: https ://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-java-webapp其代码在这里:https ://github.com/Azure -Samples/ms-identity-java-webapp/tree/master/msal-java-webapp-sample

我在 portal.microsoft.com 上使用类型创建了应用程序Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)

我已创建 keystore.p12 并将其复制到资源目录。

我的 application.properties 是:

当我运行应用程序并访问https://localhost:8443时,我得到带有登录按钮的页面。当我单击登录按钮时,我会被重定向到可以在 Outlook 帐户中进行选择的页面。网址是:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&response_mode=form_post&redirect_uri=https%3A%2F%2Flocalhost%3A8443%2Fmsal4jsample%2Fsecure%2Faad&client_id=ca146462-8880-424c-b629- cc7c0d0fb1b3&scope=openid+offline_access+profile&prompt=select_account&state=69a2ac0f-abac-46ad-b525-88f0b70182b7&nonce=9278f424-6858-4e22-bb13-7b13894abda7

当我选择一个帐户时,我收到以下错误:

所选用户帐户在租户“Microsoft 服务”中不存在,并且无法访问该租户中的应用程序“ca146462-8880-424c-b629-cc7c0d0fb1b3”。需要先将该帐户添加为租户中的外部用户。请使用其他帐户。

在此处输入图像描述

我添加了重定向 URI 在此处输入图像描述

为什么我会收到错误消息?

更新:

我将 application.properties 中的权限更改为https://login.microsoftonline.com/common,所以现在我得到了“选择帐户”页面。但是当我选择一个帐户时,我收到 403 Forbidden 错误。

0 投票
2 回答
715 浏览

java - Microsoft Oauth2 403 禁止

我想在我的 Java 应用程序中访问任何用户的日历。

https://portal.azure.com中,我创建了一个 Azure Active Directory:aniketorg123

然后我在其中创建了一个应用程序:aniketorgapp1

以下是我添加的重定向 URI:

在此处输入图像描述

然后我添加了一些权限:

在此处输入图像描述

现在,在我的应用程序中,我发送 Oauth 授权请求:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&response_mode=form_post&redirect_uri=https%3A%2F%2Flocalhost%3A8443%2Fmsal4jsample%2Fsecure%2Faad&client_id=ca146462-8880-424c-b629- cc7c0d0fb1b3&scope=openid+offline_access+profile&prompt=select_account&state=69a2ac0f-abac-46ad-b525-88f0b70182b7&nonce=9278f424-6858-4e22-bb13-7b13894abda7

这将加载“选择帐户”页面。当用户选择一个帐户时,我收到以下响应:

403 禁止

为什么我会被 403 禁止?

0 投票
1 回答
672 浏览

azure - 使用 Microsoft Identity 使用 Core 3.1 Web API 进行客户端 SPA 身份验证

我认为我的主要问题是我应该使用哪个身份验证流程 - 代表或隐式授权流程?但是,我设置的身份验证和授权Startup.cs可能是错误的,而且我还差得很远,如果是这样,我深表歉意。

我在 Azure 中有一个现有的 Angular SPA 和一个也在 Azure 中运行的 Net Framework API。

Web API 已移植到 Net Core 3.1。

在我们的 Azure 目录中,我有两个已注册的应用程序。一个用于 API,另一个用于 SPA。我已经在 WEB API 的授权客户端下添加了 SPA 客户端 ID。

值得注意的是,App 服务实际上是在不同的目录中运行(我认为这很好但只是提一下)

这是 Azure AD 中的相关身份验证/授权设置。

我可以直接成功使用 API 并进行身份验证。

SPA 正在使用 Angular ADAL。如果我没看错的话,它不适用于 Microsoft Identity V2 端点。- 我们仍然需要升级到 MSAL,尽管我仍然无法理解最终的身份验证流程(我认为这是我的主要问题)。

目前,如果我点击 SPA,它将只使用当前的 ADAL 配置进行身份验证,但是当它点击 API 时,会被重定向到https://login.microsoftonline.com/{TenantId}/oauth2/v2.0/authorize?带有 ID Token 的位置。

它挂在重定向上,并且它们是 CORS 错误,因为来源为空。我知道这是预期的,因为 SPA 配置不正确。

API 确实调用 MS Graph API 来为用户获取组(但使用客户端 ID 和客户端密码来获取访问令牌来调用 MS Graph),所以我认为这并不意味着我需要使用 On-Behalf -Of-Flow(我确实看到这篇文章Authenticating against Microsoft Graph with SPA and then using token in Web API)?

我已经查看了这个示例https://github.com/Azure-Samples/ms-identity-javascript-angular-spa-aspnetcore-webapi以了解隐式授权流程。

我确实注意到该示例中的身份验证方案是JwtBearerDefualts有意义的,因为 ID 令牌是 JWT,所以这让我质疑我的 API 启动配置。

这是在 API 中调用 MS Graph 的位,它可能需要最好地回答我应该使用 2 个流中的哪一个(它再次获得带有客户端密码的访问令牌)。

最后,我认为我们的 SPA 使用的 Angular 版本不支持 Angular MSAL。我可以只使用 Vanilla MSAL JS(认为我们现在没有时间升级 Angular)吗?

0 投票
1 回答
114 浏览

asp.net-core - Azure、Office 和其他产品中的“切换用户”下拉菜单是否可用于集成到 AAD/B2C Web 应用程序?

我有兴趣在我的个人 ASP.NET(核心/Blazor WebAssembly)应用程序中包含 Azure 和 Office 中可用的下拉帐户选择功能。

当使用多个 AAD 帐户或一次访问多个目录时,通常会发生这种情况。

在此处输入图像描述

理想情况下,我会有一个更紧凑的视图(如谷歌),并且切换速度也很快

0 投票
1 回答
83 浏览

java - Microsoft Graph Identity 避免再次选择帐户

我在 Java Spring Boot 应用程序中使用msal4j库进行身份和令牌管理来访问 Microsoft Graph API。

我在这里关注示例代码。

在代码中,TokenCache由 accessTokens、refreshTokens、idTokens 组成的对象存储在 http 会话中。

现在,如果我的 Spring Boot 应用程序崩溃等,令牌将会丢失。而且我将不得不再次进行帐户选择过程,我想避免这种情况,因为用户已经选择了帐户并表示同意。

如果我的应用程序重新启动,如何避免再次执行帐户选择过程?我需要将令牌缓存存储在数据库中吗?

我的授权 URL 如下所示:

0 投票
1 回答
79 浏览

azure - 如何配置和使用日志记录来确定 AAD/B2C 应用程序是使用 V1 还是 V2 端点(Auth 或 Graph)?

我有兴趣记录哪些已注册的 AAD/B2C 应用程序正在使用:

问题

  1. 我应该采取什么方法(最好以日志为重点)来收集和报告企业中运行的内容?
  2. 有没有办法确定哪个 SDK(和 SDK 版本)用于各种身份验证流程?(以及哪个流量)

(PS 产品团队,有什么方法可以将这个结果集成到门户中:))

0 投票
1 回答
87 浏览

oauth - 如何以编程方式访问受 SSO 保护的 Web API?

我有一个包含少量 API 的 Web 应用程序。Web 应用程序还有一个 HTML 页面,这些 API 用于呈现 UI。Web 应用程序在内部托管,但通过 Microsoft Azure AD 身份验证进行保护。我正在尝试构建一个可以直接使用 API 的 C# 控制台应用程序,而无需在浏览器上打开网站。是否可以直接从 c# 控制台应用程序访问 Web API?我了解当使用浏览器访问 SSO 内容时,它将管理身份验证过程。但是我不知道如何从 C# 应用程序中做到这一点。Microsoft 是否发布了任何用于处理 Azure AD 身份验证的库?

0 投票
1 回答
94 浏览

azure - 如何从 api 范围将范围添加到 id 令牌

我在 Azure 中有两个应用注册:

  1. 一个客户端应用程序 (Web),它可以发出 id 和访问令牌,并添加了 API 的所有范围。
  2. 一个了解 Web 应用程序并向其公开一些范围的 API 注册。

在 API 注册清单中,我定义了一些用户角色。这些角色分配给相应企业应用程序中的用户。
由 Web 应用程序发布的该 API 的所有访问令牌都包含这些角色,并且我的 API 可以通过这种方式进行授权。
但是我的 SPA 只有不知道这些角色的 id 令牌。
我解决这个问题的方法是:

  1. 我可以让我的 SPA 解析访问令牌并提取角色。但是 MS 不建议这样做,所以我不想这样做 - 即使它会起作用。
  2. 我还可以将访问令牌发送到一个 API 端点,它可以解析令牌并为我返回角色。这已经更好了,但我仍然不喜欢这种方法。

是否有可能在 Web 应用程序发布的 ID 令牌中包含来自 API 的角色?如果我将角色放在 Web 应用程序本身的清单中,这些角色就会出现在 ID 令牌中。
但我不想在 API 和 Web 应用程序清单中扮演多余的角色。
什么是解决我的问题的合适方法?

最好将所有 API 角色也包含在 Web 应用程序发布的 ID 令牌中。但我找不到任何办法这样做......

0 投票
1 回答
104 浏览

oauth-2.0 - 在微服务架构中我需要多少应用注册

我有一个微服务架构,其中一个单页应用程序访问三个不同的 API:

在此处输入图像描述

我通过 Microsoft 身份平台保护这些 API,因此我还需要服务主体。
我的第一种方法与我在博客或 MS 文档中找到的所有示例相匹配。
在这种情况下,我为客户端应用程序注册了一个应用程序,并为 API 注册了三个额外的应用程序:

在此处输入图像描述

这会产生以下影响:

  1. 每个 API 都有自己的受众。
  2. 我为每个应用程序获得了四个服务主体。
  3. 我得到了三个不同的地方,我必须管理用户分配给角色的位置。(例如:用户 A 可以从 API A 等读取资产...)

这可行,但也有一些问题:

  1. 其他管理允许哪个用户执行操作的管理员对他们必须分配角色的三个不同位置感到困惑。有一个中心位置会更好。
  2. 用户的角色没有放在 ID 令牌中,因为只有客户端应用程序的角色会去那里......但我不想再次在客户端应用程序中分配权限。
  3. 如果 API A 想要调用 API B 或 C,我需要两个用于其他 API 的访问令牌。

这让我想到了第二个想法:

在此处输入图像描述

在这里,我对所有 3 个 API 进行了一次注册。这已经解决了问题1和问题2。但它也给我一种奇怪的感觉,因为我从来没有发现其他人这样做。
我的 ID 令牌也没有告诉我角色,所以为了解决这个问题,我什至可以更进一步,为所有内容进行单个应用程序注册:

在此处输入图像描述

现在,一个注册公开了一个 API,也使用了这个 API。什么是可能的,似乎可以解决我的问题。我什至现在在我的 ID 令牌和访问令牌中获得用户的所有角色。

但是,这与我发现的所有其他示例相矛盾。

  1. 最后一种解决方案有哪些缺点?
  2. 我应该选择三种方法中的哪一种?
0 投票
1 回答
594 浏览

.net-core - Blazor WASM 中的 Microsoft Identity Web 无效令牌

我刚刚尝试完成此操作:https ://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore-v2/tree/master/1.%20Desktop%20app%20calls%20Web%20API

我没有使用 WPF 应用程序,而是使用 Blazor WASM 客户端。

我将令牌添加到我的 .net 核心 API 的传出请求中,但我总是得到 401。

Blazor 验证良好并取回令牌,似乎工作正常,但是:

  • 观众的 GUID 错误
  • 缺少“scp”(范围),因此令牌无法使用

如果我从上述链接运行示例并解码令牌,我可以在令牌中看到正确的 AUD 和 SCP。所以这可能与我在 Blazor 中的配置有关?

在 Blazor 中配置

回复

受众 GUID 是我的 Blazor 应用注册的客户端 ID

Startup.cs 中的代码

知道可能出了什么问题吗?