问题标签 [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.
azure - 我的 WebAPI 应如何访问 Microsoft Identity Platform 中其他租户公开的其他 API 到我的应用程序中?
我有一个用于单个 ASP.NET Core 网站的“中心辐射”模型,以及位于 N 个其他 AzureAD 租户中的几个“辐射 API”。
...调用位于其他租户中的 API 应用程序...
我的目标是让这个“中心”网站使用与场景一致的外部合作伙伴的增量同意:受保护的 AzureAD API 调用另一个受保护的 API。我的情况的主要区别在于第二个 API 位于另一个租户中,由另一个我不认识的管理员管理。(我应该提防龙吗?如果是,它们是什么?)
由于我需要使用 On-Behalf-Of 流程来访问这些外部网站,因此该网站成为受信任的客户端。AAD 示例仅包括此方案的桌面和 SPA 受信任客户端应用程序(示例1 、示例 2)
问题
- 这是受支持的方案吗?(向其他租户提供服务的租户)
- 共享 API 范围、权限和其他 GUID/标识符的首选方式是什么?
- 在 v2 Endpoint 中,是否同时支持个人和 AAD 帐户?
- 如何将应用程序清单中范围和其他内容的租户 GUID 转换为显示名称?
javascript - Azure Active Directory API 中的错误重定向 URI
在本地主机上使用 Azure LS1 API 运行登录它工作正常,但是在服务器上迁移脚本我收到以下错误:
AADSTS50011:请求中指定的回复 url 与为应用程序配置的回复 url 不匹配:
我知道问题出在 Azure 门户中的应用程序设置上,我应该使用服务器地址而不是 localhost:30662 更改重定向 URI,但问题出在此处:因为应用程序必须在地址为 192.168 的内部服务器上运行.1.xxx 和 Azure 门户需要一个带有 https:// 认证的地址(如果与 localhost 不同),我该如何管理它以不在本地服务器上安装 SSL 证书?有没有办法在没有 https:// 的情况下插入重定向 URI?
AADSTS50011:请求中指定的回复 url 与为应用程序配置的回复 url 不匹配:
azure - 将 .NET Core 3.0 Web 应用发布到 Azure 云
我正在尝试将 .NET Core 3.0 Web 应用程序发布到 Azure 云,但显然尚不支持 3.0 版。我已经尝试了几件事,但似乎没有任何效果。有人可以帮忙吗?
...
现在我收到此错误:
更新:
我看到这是日志,顺便说一句:
- 确保 web.config 文件的 NTFS 权限正确并允许访问 Web 服务器的计算机帐户。
- 检查事件日志以查看是否记录了任何其他信息。
- 验证 DLL 的权限。
- 如果请求映射到托管处理程序,请安装 .NET 可扩展性功能。
- 创建跟踪规则以跟踪此 HTTP 状态代码的失败请求。有关为失败的请求创建跟踪规则的更多信息,请单击此处。
c# - 为什么 AcquireTokenByAuthorizationCode 不返回 RefreshToken
在本文档中,它提供了调用 Web API 的 Web 应用程序的完整流程:
- Web 应用程序执行策略,用户完成用户体验。
- Azure AD B2C 向浏览器返回一个 (OpenID Connect) id_token 和一个授权代码。
- 浏览器将 id_token 和授权代码发布到重定向 URI。
- Web 服务器验证 id_token 并设置会话 cookie。
- Web 服务器通过向 Azure AD B2C 提供授权代码、应用程序客户端 ID 和客户端凭据来向 Azure AD B2C 请求 access_token。
- access_token 和 refresh_token 返回到 Web 服务器。
- 使用授权标头中的 access_token 调用 Web API。
- Web API 验证令牌。
- 安全数据返回到 Web 应用程序。
查看 6. 并使用 Azure-Samples 存储库中的代码active-directory-b2c-dotnet-webapp-and-webapi ,我无法得到该行
返回一个 refresh_token。它返回一个 IdToken 和 AccessToken 但没有 RefreshToken。
通过使用我的浏览器和 Postman 并按照本文档中的步骤使用相同的 B2C 租户和应用程序,我确实按预期获得了刷新令牌。
这个问题与我的类似,并且其中一个答案中提到的博客文章提供了解决没有刷新令牌的症状的方法,但我的问题仍然存在:
我怎样才能AcquireTokenByAuthorizationCode
返回一个 refresh_token?
azure - 如何通过 IMAP 访问 Outlook 电子邮件帐户
所以我实际上是在尝试使用 Node.js 通过 IMAP 连接到 Outlook/Exchange 电子邮件帐户。
使用旧的 Live Connect API,我可以AUTHENTICATE
使用 OAuth 2 令牌 ( https://msdn.microsoft.com/en-us/windows/desktop/dn440163 ) 执行 IMAP 命令。但这似乎不适用于 Exchange 帐户,因为尝试对这些帐户执行 Oauth 流程只会引发错误“此 Microsoft 帐户不存在”。
使用新的 Microsoft 身份平台,我可以很好地为 Exchange 帐户进行 Oauth。但这带来了一个完全不同的问题,即令牌不适用于 IMAP。我猜我在这里缺少一个范围(尽管我已经添加了所有邮件范围),但是没有关于此的文档,我也没有与 Microsoft 的付费支持计划。
将 Exchange 添加到 Apple Mail 时,我看到它显示了一个不同的同意屏幕,以不同的方式请求同意。我相信 Apple Mail 也通过 Oauth 2.0 机制连接到 Exchange,所以我想知道他们是如何做到的。
如果有人有通过 IMAP 连接到 Outlook 或 Exchange 帐户的经验,我将非常感激!
azure-active-directory - 用户 JWT 与 client_credentials JWT 的不同权限
我注意到,当我登录后从 Azure AD 获取 JWT 时,JWT 指定“ https://login.microsoftonline.com ”作为颁发机构。但是,如果我使用 client_credentials 流获取 JWT,则颁发机构是“ https://sts.windows.net ”。具有不同的颁发机构使得很难将应用程序配置为使用这两种 JWT,因为配置过程只允许您指定一个机构。
微软对 JWT 使用不同的颁发机构是否有原因?我认为这是因为 MSFT 想要分离这两种使用场景。也就是说,他们希望阻止创建在基于用户和非基于用户的安全上下文之间切换的应用程序。我失踪还有其他原因吗?
azure - Get some tenant identifier when signing in external account (Microsoft account)
I'm building SaaS web based application that needs to be able accept users from multiple Azure AD-s and there external users (usually Microsoft accounts). I created example and tried to see what I can get from access token.
Sample consists from one client application (.js) that uses MSAL library to handle authentication and two APIs that have protected endpoints. I also created three separate Azure AD applications AlanClient, AlanAPI1, AlanAPI2. Both AlanAPI1 and AlanAPI2 have API exposed (Expose an API section in Azure Portal application) and have specified one consumer AlanClient. AlanClient has permission to both APIs. All applications are registered with "accessTokenAcceptedVersion": 2
and "signInAudience": "AzureADandPersonalMicrosoftAccount"
.
I have multiple cases that I want to cover and as far I tested when I sign in with outlook account that is defined as external User in Azure AD (both Azure AD where application is originally registered and Azure AD that is another "tenant") I don't get any info (in token) about the tenant this account is registered.
Let me explain. I was hoping for something like this
"tid": "value of Azure AD tenant where this account is registered as external user"
- If this account is regitered as external user in multiple tenants that use this app I will expect array of tenants or something like this.
Instead I get
"tid": "9188040d-6c67-4c5b-b112-36a304b66dad"
which is value of "Microsoft presonal account tenant" as far I know.
EDIT:
Thanks to juunas answer in my client application I changed MSAL config authority
from authority: 'https://login.microsoftonline.com/common'
to authority: 'https://login.microsoftonline.com/organizations'
and also updated manifest value signInAudience
with AzureADMultipleOrgs
.
Now I have situation where I have Azure AD called "A" and in this azure AD have registered my applications. Tenant A has external user called alan.p365@outlook.com and this workd fine. I can login with this account and I get tid parametar indicated value of tenant A. When I try to do this with Tenant B that has lovro.p365@outlook.com as external user this failed with message
AADSTS50020: User account 'lovro.p365@...' from identity provider 'live.com' does not exist in tenant 'A' and cannot access the application AlanClient in that tenant. The account needs to be added as an external user in the tenant first. Sign out and sign in again with a different Azure AD user account.
Just to clarify I successfully singed in with tenant administrator of tenant B and tenant B has this applications in Enterprise applications list.
GitHub example project: https://github.com/alan994/AzureADTest
There is another question about this but conclusion is that this is not supported with nothing except common endpoint in (v2.0)
azure-active-directory - 用户从 Azure AD 中删除后保持登录状态
我已经使用来自https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/1-的 Microsoft.Identity.Web 设置了一个小型 ASP.NET Core v3 webapp WebApp-OIDC
这工作正常。但是,当我以 userA 身份登录,然后从我们的 Azure AD 中删除该用户时,该用户仍保持登录状态。如何伪造我的应用程序以定期检查该用户是否仍然存在或他的角色是否已更改?
从Azure AD auth 的 Cookie 未过期,我知道我可以设置OpenIdConnectOptions.UseTokenLifetime = false
和CookieAuthenticationOptions.ExpireTimeSpan
. 但我没有这些选项,因为(我认为)这是由 Microsoft.Identity.Web 处理的。
这是我的startup.cs:
我应该添加OpenIdConnectOptions
andCookieAuthenticationOptions
吗?
更新:提琴手响应
https://localhost:44321/AzureAD/Account/SignIn:
https://login.microsoftonline.com/4723a546-001 ...:
https://login.microsoftonline.com/4723a546-001../login HTTP/1.1:
更新 2:
我的 Startup.cs 中的更改现在似乎确实有效。我以 UserC 身份登录,然后从 AAD 中删除此用户。一个小时后,当我更改页面时,我需要再次登录。这当然失败了。小时有点奇怪,因为我设置ExpireTimeSpan
为 10 分钟。但我已经很高兴用户得到检查。
一个旁注:当我现在重新启动我的应用程序时,它直接重定向到 login.live.com 并要求我输入密码,但我无法更改用户名!
在 URL 中,我将用户名视为参数,当我将其删除时,它确实要求我输入用户名。但是当我使用另一个帐户时,它一直说我的密码不正确。很可能是因为它使用的是我的个人版本而不是我的工作版本。我无法更改此设置,因此我无法再登录自己的应用程序。
另一个巨大的缺点是我还使用我的管理员帐户登录了 Azure 门户。第二天早上,在重新启动我的笔记本电脑并重新打开 Chrome 并恢复我的选项卡(包括 Azure 门户的选项卡)后,我现在以我在应用程序中使用的用户身份登录。为什么??当该用户被删除时,我无法再登录到 Azure 门户。很可能是因为它使用的是我的个人版本而不是我的商业版本。
我不确定是否应该继续为我的新应用程序使用 Microsoft Identity Platform。到目前为止,它对我来说弊大于利。
azure - 从 Microsoft 帐户登录不适用于多租户 Azure AD 应用程序
我正在构建基于多租户 SaaS Web 的应用程序。应用程序在我的租户中注册,每个拥有 office 365 订阅的客户都将在 Azure AD 中获得服务主体对象。
我在从客户租户的外部帐户(Microsoft 帐户)登录时遇到问题。
我创建了示例并尝试查看我可以从访问令牌中获得什么。
示例由一个使用 MSAL 库处理身份验证的客户端应用程序 (.js) 和两个具有受保护端点的 API 组成。我还创建了三个独立的 Azure AD 应用程序 AlanClient、AlanAPI1、AlanAPI2。AlanAPI1 和 AlanAPI2 都公开了 API(在 Azure 门户应用程序中公开 API 部分)并指定了一个消费者 AlanClient。AlanClient 拥有这两个 API 的权限。所有应用程序都注册了“accessTokenAcceptedVersion”:2 和“signInAudience”:“AzureADMultipleOrgs”。
据我了解,这应该足以登录
- 来自宿主租户的 Office 365 帐户
- 在宿主租户中注册为外部用户的 Microsoft 帐户
- 来宾租户的 Office 365 帐户
- 在来宾租户中注册为外部用户的 Microsoft 帐户
说明:-主机租户->注册应用程序的 Azure AD 实例。在租户 A 下方的错误消息中。 - 来宾租户 -> 仅使用应用程序的 Azure AD 实例
我对案例号有疑问。4
我收到此错误消息: AADSTS50020:来自身份提供者“live.com”的用户帐户“lovro.p365@...”在租户“A”中不存在,并且无法访问该租户中的应用程序 AlanClient。需要先将该帐户添加为租户中的外部用户。注销并使用不同的 Azure AD 用户帐户重新登录。
azure-active-directory - 将 .NETv4.7 应用程序升级到 .NET Core v3 和 Identity Platform
我正在研究如何使用 Blazor 和 Identity Platform 将 Angular+.NETv4.7 应用程序转换为 .NET Core v3。
我可以使用 Identity Platform 和我的 Azure AD 登录,尽管我有一些高级问题: 从 Azure AD 删除后用户保持登录状态
我现在要显示登录用户的姓名和个人资料照片的部分。我正在使用这个例子。
它有效,我可以获取照片和其他数据,但只有当我单击配置文件链接并触发配置文件控制器时。配置文件数据保存在ViewData
. 但是如何在我的 中获取这些数据_LoginPartial.cshtml
?我也应该在我的 Home 控制器中调用 Graph 吗?
更新:我设法通过创建一个View Component
. 这是正确的工作流程吗?我必须创建 4 个文件才能使其正常工作:显示照片和名称。