首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft Graph and Bookings API的身份验证流服务

Microsoft Graph and Bookings API的身份验证流服务
EN

Stack Overflow用户
提问于 2018-11-14 06:41:43
回答 2查看 473关注 0票数 0

我正在构建一个自定义移动应用程序,它有一个客户端,自定义后端服务器(我正在构建),并与许多其他api的交互。

我面临的问题是,我需要通过服务器到服务器的身份验证,并使用共享的客户端密钥。我知道来自微软的大量文档,但还没有找到解决方案。我想知道是否服务器到服务器的预订甚至是可能的。

我可以使用这些权限将access_token服务器连接到服务器。(我已在Azure AD中向此应用程序授予了所有权限)。

代码语言:javascript
复制
"roles": [
"Calls.JoinGroupCall.All",
"OnlineMeetings.Read.All",
"OnlineMeetings.ReadWrite.All",
"Application.ReadWrite.OwnedBy",
"Calendars.Read",
"People.Read.All",
"Application.ReadWrite.All",
"Calls.InitiateGroupCall.All",
"Directory.ReadWrite.All",
"Calls.JoinGroupCallAsGuest.All",
"Sites.Read.All",
"Sites.ReadWrite.All",
"Sites.Manage.All",
"Files.ReadWrite.All",
"Directory.Read.All",
"User.Read.All",
"Calendars.ReadWrite",
"Mail.Send",
"ProgramControl.Read.All",
"ProgramControl.ReadWrite.All",
"Calls.Initiate.All"

],

这些是来自解码令牌的权限。当我调用Bookings api时,收到401。

但是,我可以使用这个令牌来访问不同的图形端点,没有问题。

我需要注意的是,我可以使用我的帐户通过Graph Explorer成功调用bookings api,这与此“Azure AD中的应用程序”无关。

Azure AD中的此资源是否需要预订许可证?这可能是S2S吗?

有没有其他方法可以在没有用户凭证的情况下绕过这一点?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-11-14 07:54:03

到目前为止,Microsoft Bookings API似乎还不支持“应用程序权限”。

唯一可用的权限是“委托权限”,这意味着您的令牌必须在登录用户的上下文中获得。

下面是我遇到的两个Microsoft文档源:

  • -请查看"Bookings Permissions“部分。

我知道您提到了使用客户端密钥的服务器到服务器身份验证。AFAIK,这种情况不会直接工作,因为clientId和clientSecret只提供应用程序的标识(不能分配任何权限,因为此接口没有相关的应用程序权限可用)。

如果您需要一些用户上下文,请参阅上面的bookings samples链接中的代码,以便在Native应用程序中使用ADAL获取令牌

代码语言:javascript
复制
var authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/common/");

var authenticationResult = await authenticationContext.AcquireTokenAsync(
  "https://graph.microsoft.com/",
  clientApplication_ClientId,
  clientApplication_RedirectUri,
  new PlatformParameters(PromptBehavior.RefreshSession));

// The results of this call are sent as the Authorization header of each HTTPS request to Graph.
var authorizationHeader = authenticationResult.CreateAuthorizationHeader();

关于如何使此场景工作的建议

代表Flow的

  1. On

您的移动应用程序客户端可以提示用户输入凭据,以代表用户执行操作,并调用您的后端web API,后者反过来调用下游API,如Bookings API。这称为Service to Service Calls on behalf of the User

下面是一个代码示例,它通过一个本机应用程序(WPF)和一个SPA准确地说明了这一点。在您的示例中,只需将WPF应用程序替换为您的移动客户端应用程序,以便于理解,场景的其余部分将变得非常相似。

  1. ROPC授权(不推荐)

授予资源所有者密码凭据可能会有所帮助,因为您的应用程序将为其提供最终用户密码,但它有多个问题,任何安全指南都会阻止您使用it.ROPC,这会带来安全风险,不遵循最佳实践,并且还存在功能问题。ROPC不适用于支持MFA的用户以及联合身份验证用户。

出于所有实际目的,您应该尽可能长时间地避免ROPC。您可以在ADAL文档本身和来自微软的多个其他文档中找到相同的建议,甚至是关于OAuth 2.0的一般文档。

票数 0
EN

Stack Overflow用户

发布于 2018-11-14 08:14:00

由于微软文档的噩梦,我花了一周多的时间试图解决这个问题。我发帖只是为了帮助别人!

Bookings还不支持服务到服务。因此,如果你不想在没有用户实际登录的情况下实现这一点,IE。如果您有专门的预订管理员帐户凭据,则必须对客户端凭据进行硬编码。

我在这里找到了我的答案https://stackoverflow.com/a/49814924/9105626

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53290598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档