问题标签 [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.
c# - 为什么添加 Microsoft 身份验证会导致另一个策略的 GetTokenAsync("access_token") 返回 null?
问题:
我有一个带有 OpenIdConnect 身份验证的 ASP.NET Core 3.1 Web 应用程序。我在一个单独的(非默认)策略上添加了 Microsoft 身份验证 (Azure Active Directory v2),以便在一个特定控制器上使用。
httpContext.GetTokenAsync("access_token")
当由使用我的原始 OpenIdConnect 实现授权的控制器调用时,使用以下行(在 Startup.cs 中)添加 Microsoft 标识会导致返回 null。httpContext
被调用的对象仍然具有来自原始 OpenIdConnect 实现的所有自定义声明。删除以下行可以解决问题,我可以成功获取访问令牌。
其他详情:
Microsoft 标识实施采用单独的策略
AzureAdOidc
尝试获取访问令牌的默认策略控制器调用的策略没有控制器。
asp.net-core - 无法使用 AddMicrosoftIdentityWebApiAuthentication 使用 EnableTokenAcquisitionToCallDownstreamApi 设置范围
这编译为startup.cs
:
但是,由于我只在处理 API 控制器,而不是 Web 应用程序,所以我想这样做:
但是,这不会编译。至少在Microsoft.Identity.Web
v1.0 中没有。Intellisense 告诉我string[] is not assignable to parameter type ConfidentialClientApplicationOptions
。
不同之处在于AddMicrosoftIdentityWebApiAuthentication
返回一个MicrosoftIdentityWebApiAuthenticationBuilder
,而前者返回一个 `MicrosoftIdentityAppCallsWebApiAuthenticationBuilder。
这里有解决方法吗?
我要完成的是确保在请求 Graph 访问令牌时正确设置范围。目前,情况似乎并非如此,因为我在尝试调用 Graph 时收到这样的错误 - 例如await graphServiceClient.Applications.Request().GetAsync();
。
换句话说,我需要的是一个如下所示的应用程序访问令牌:
我可以使用 Postman 手动生成上述内容,如果我使用它,它就可以工作。确认 Azure AD 中的应用程序配置正确。
oauth-2.0 - 没有 ROPC 的 Node-Red 中的 Microsoft 身份平台
有没有办法在不使用 Node-Red 中的 ROPC 身份验证流的情况下将 Microsoft Identiy Platform 与 OAuth 2.0 流一起使用?我不能使用 ROPC,因为目标租户强制执行 MFA。强制执行 MFA 时,ROPC 将被阻止。
我找到了插件node-red-contrib-oauth2,但无法通过除 ROPC 之外的另一个 OAuth 2.0 流程与 Microsoft Identity Platform 一起使用。
microsoft-graph-api - 如何使用 ms graph win 读取 ChannelMessages。使用当前 userPrincipalName 的服务应用程序(在应用程序权限中)
我们有一个守护程序应用程序,它使用 MS 图连接到团队。它使用“应用程序权限”模式,并且大多数权限都获得了管理员同意。我们可以根据公司要求从该服务中添加频道(私人或“标准”)、添加/删除成员等。一切都很好。
对于 ChannelMessages,我们希望能够根据 userPrincipalName 从注册应用程序的同一租户中检索它们。(我知道有一个 ChannelMessage.Read.All 具有应用程序权限,它要求我们提交一个形式到 MS,我们目前不追求这条路线......)。
我们是否必须创建 ConfidentialClientApplication 对象才能与 MS 图进行通信?如果是这样,我们如何仅基于 userPrincipalName 创建 ClaimsPrincipal 或 ClaimsIdentity?或者这个问题有不同的解决方案吗?
感谢您的帮助。
谢谢,艺术
microsoft-graph-api - OnBehalfOfProfider 的工作示例,用于调用 MS Graph 的守护程序应用程序
我很难找到适合这种情况的工作示例:
OnBehalfOfProvider authProvider = new OnBehalfOfProvider(confidentialClientApplication, scopes);
我面临的问题:1.我从哪个包中获得 OnBehalfOfProfider?2.假设我必须获得一个 AAD 用户的访问令牌,而无需用户的实际登录(它是一个守护程序应用程序) - 我如何构建 UserAssertion 实例?
这里的信息基于两个来源:MSDN 'on behlaf of provider' https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS#OnBehalfOfProvider 和 github's 'how to调用 OBO' https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/on-behalf-of
谢谢艺术
c# - 团队中具有 MS 身份验证的服务器端 Blazor?
所以我有一个工作的服务器端 Blazor 应用程序,它与我们公司的 Azure AD 相关联,用于一些内部报告表。没有什么花哨的,几乎与周围的所有教程完全一样,而且它本身就可以正常工作。然后,我被要求将其作为我们公司 Teams 选项卡的一部分。
我想我会将它添加为网站选项卡,但随后遇到了一个问题,即 Microsoft 的登录页面不喜欢在 iframe 中(这很有意义)。问题是 - 我可以设置一个选项来强制弹出版本的身份验证而不是重定向吗?下面的 Startup.cs
我的下一步是重写 auth 以不使用 nuget 包,而是使用 adal js 库,而不是遵循此页面的文档(MS Teams Silent Auth),虽然它只花了我几天的时间,但我不想报废我认为这是一种更清洁的身份验证方式,可以让它在我们的新用例中工作。希望有人可以指出我缺少的东西。
c# - 带有 asp.net Core Identity 的 Microsoft Identity Pltaform
我正在尝试将 Microsoft Identity Platform 用于 Web 应用程序的某些用户。我正在使用这个例子: https ://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-aspnet-core-webapp
问题是该示例显示了如何为整个应用程序“全局”打开 Microsoft 标识,并且所有角色都是从平台填充的。但在我的情况下,用户存储在 DB 中,使用 Azure AD 登录应该是可选的。理想的流程是使用 Microsoft 身份平台登录用户,成功登录后获取电子邮件,然后使用现有的 asp.net 核心身份机制对用户进行身份验证,并从数据库中填充用户(使用 UserStore 等)。但是我找不到方法,怎么办,如何在平台成功登录后处理“事件”?
甚至可以使用 Microsoft 身份平台?
c# - Microsoft 身份 - 撤销授权
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。
提示用户授权应用程序;然后使用获取的访问令牌调用 Graph API。刷新令牌用于在旧令牌过期时发出新的访问令牌,如下所述:https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code -流动
几个问题/观察:
- 假设用户 John 授权应用代表他发送电子邮件。如果管理员从 azure 门户中删除该应用程序,John 授权该应用程序时发出的访问/刷新令牌仍然有效。
- 如果访问令牌仍然处于活动状态,则可以使用它来调用图形 api;
- 如果访问令牌过期,刷新令牌仍可用于请求新的访问令牌
这种行为是有意的吗?
阅读https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/users-revoke-access和https://docs.microsoft.com/en-us/powershell/后module/azuread/revoke-azureaduserallrefreshtoken?view=azureadps-2.0似乎只是从用户那里删除应用程序并不会撤销令牌。
- 假设用户 John 授权应用代表他发送电子邮件。如果 John 访问https://myapplications.microsoft.com并删除该应用程序,他将无法使用刷新令牌来获取新的访问令牌,这是预期的。
但是,我注意到如果 John 重新授权该应用程序代表他执行操作,该应用程序将不会再出现在https://myapplications.microsoft.com上。这种行为似乎有点不一致。用户撤销对应用程序的访问权限的正确方法是什么?
asp.net-core - 您如何从 Azure Active Directory 中获取搭建的 Weather Forecast Api 将接受的访问令牌?
我正在尝试使用来自 azure 活动目录的访问令牌来构建一个新的 WebApi。
我正在使用 .net core v3.1 和 Visual Studio 2019。
我使用“Asp.net 核心 Web 应用程序”模板创建了一个新项目并选择了一个“API”项目并将身份验证类型更改为“工作或学校帐户”并将 App ID Url 设置为 Api://Automation/TestApi
然后,Visual Studio 为我搭建了一个带有模拟天气预报服务的 Web API,如果我注释掉 [Authorize] 属性,它会按预期在浏览器中很好地启动。它还在 AzureActive Directory 中为我创建了一个应用程序注册。
恢复 [Authorize] 属性后,我无法从客户端应用程序调用 API,因此我决定使用邮递员调用 API 以查看发生了什么。
我向创建的应用程序注册视觉工作室添加了一个客户端密码,并使用应用程序(客户端)ID 和 api://Automation/TestApi/.default 作为范围将邮递员请求放在一起,如下所示。
这工作正常并返回访问令牌但是当我尝试使用该访问令牌来调用默认的天气预报端点时,我在 WWW-Authenticate 响应标头中收到 HTTP 401 未经授权的错误
"Bearer error="invalid_token", error_description="受众 'api://Automation/TestApi' 无效"
有什么我想念的吗?我找不到任何关于观众应该是什么的线索,也没有明显的控制方法。
As Requested here 是公开 API 屏幕的内容
和我正在使用的解码的 jwt 令牌
更新
我在下面尝试了@CarlZhao 的答案,但它并没有真正起作用。但是我记得我刚才问过一个关于令牌中错误发行者的问题,结果是手动编辑 API 注册中的清单 json 并设置“accessTokenAcceptedVersion”:2
现在我得到了一个以 clientId guid 作为观众的 v2 函数
但是,使用此令牌仍然不起作用!我现在收到有关发行者的错误:
Bearer error="invalid_token", error_description="The issuer 'https://login.microsoftonline.com/{{guid}}/v2.0' is invalid
asp.net-core - 使用客户端凭据的交互式(非守护程序)应用程序
在“场景:调用 Web API 的守护程序应用程序”中,微软说:“还有另一种常见的情况,非守护程序应用程序使用客户端凭据:即使它们代表用户行事,它们也需要访问 Web API 或它们下的资源。出于技术原因的自己的身份。”
这正是我所需要的。具有 AAD 用户身份验证的 Web 应用程序,但应用程序能够以提升的权限(超过用户拥有的权限)调用 MS Graph。
在“ Microsoft 身份平台和 OAuth 2.0 客户端凭据流程”下有一个名为“ ms-identity-aspnet-daemon-webapp ”的示例,非常接近,但它使用 asp.net。
有人有相同的.net 核心示例代码吗?
谢谢!