微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调用MS Graph

如何解决调用MS Graph

在这种情况下,我很难找到一个可行的例子:

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithRedirectUri(redirectUri)
.WithClientSecret(clientSecret)
.Build();

OnBehalfOfProvider authProvider =新的OnBehalfOfProvider(confidentialClientApplication,范围);

我面临的问题: 1.我从什么包中获得OnBehalfOfProfider? 2.假设我必须获取AAD用户的访问令牌,而无需用户的实际登录(这是一个守护程序)-如何构建UserAssertion实例?

此处的信息基于两个来源: MSDN“对提供商的支持https://docs.microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS#OnBehalfOfProvider 和github的“如何调用OBO” https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/on-behalf-of

谢谢 艺术

解决方法

当您有一个API会接收包含用户信息的访问令牌,并且您想以该用户身份调用另一个API时,将使用代表流程。 听起来不像您这里的情况。

这听起来更像是一种无人值守的后台访问方案。 本质上有两种选择:

  1. 使用刷新令牌流
  2. 使用客户端凭据流
  3. 使用ROPC流

第一种方法较为复杂,但建议用于非关键过程。 MSAL确实做了很多简化。 工作方式:

  1. 用户使用以下方式对您的应用进行身份验证:授权码流
  2. MSAL将刷新令牌存储在良好的令牌缓存中(数据库/ Azure Key Vault等),您需要进行配置
  3. 您的后台处理器使用相同的令牌缓存,从而使其可以使用刷新令牌来获取新令牌

这种方法的缺点是它有点复杂,并且刷新令牌可能会过期,需要用户重新进行身份验证。

第二种方法更简单,但是需要使用应用程序权限而不是委托权限。 使用客户端凭据,您的应用程序需要自己访问所有数据,而无需任何用户。 因此,这需要大量访问,并依赖支持此方法的API。 但这是简单可靠的。

第三种方法是我不推荐的方法。 它要求您使用用户的用户名和密码来获取该用户的令牌。 不仅需要存储用户的密码,而且如果用户启用了多因素身份验证,是来宾用户等,则根本不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。