我正在构建一个自定义移动应用程序,它有一个客户端,自定义后端服务器(我正在构建),并与许多其他api的交互。
我面临的问题是,我需要通过服务器到服务器的身份验证,并使用共享的客户端密钥。我知道来自微软的大量文档,但还没有找到解决方案。我想知道是否服务器到服务器的预订甚至是可能的。
我可以使用这些权限将access_token服务器连接到服务器。(我已在Azure AD中向此应用程序授予了所有权限)。
"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吗?
有没有其他方法可以在没有用户凭证的情况下绕过这一点?
谢谢。
发布于 2018-11-14 07:54:03
到目前为止,Microsoft Bookings API似乎还不支持“应用程序权限”。
唯一可用的权限是“委托权限”,这意味着您的令牌必须在登录用户的上下文中获得。
下面是我遇到的两个Microsoft文档源:


我知道您提到了使用客户端密钥的服务器到服务器身份验证。AFAIK,这种情况不会直接工作,因为clientId和clientSecret只提供应用程序的标识(不能分配任何权限,因为此接口没有相关的应用程序权限可用)。
如果您需要一些用户上下文,请参阅上面的bookings samples链接中的代码,以便在Native应用程序中使用ADAL获取令牌
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的
您的移动应用程序客户端可以提示用户输入凭据,以代表用户执行操作,并调用您的后端web API,后者反过来调用下游API,如Bookings API。这称为Service to Service Calls on behalf of the User
下面是一个代码示例,它通过一个本机应用程序(WPF)和一个SPA准确地说明了这一点。在您的示例中,只需将WPF应用程序替换为您的移动客户端应用程序,以便于理解,场景的其余部分将变得非常相似。

授予资源所有者密码凭据可能会有所帮助,因为您的应用程序将为其提供最终用户密码,但它有多个问题,任何安全指南都会阻止您使用it.ROPC,这会带来安全风险,不遵循最佳实践,并且还存在功能问题。ROPC不适用于支持MFA的用户以及联合身份验证用户。
出于所有实际目的,您应该尽可能长时间地避免ROPC。您可以在ADAL文档本身和来自微软的多个其他文档中找到相同的建议,甚至是关于OAuth 2.0的一般文档。
发布于 2018-11-14 08:14:00
由于微软文档的噩梦,我花了一周多的时间试图解决这个问题。我发帖只是为了帮助别人!
Bookings还不支持服务到服务。因此,如果你不想在没有用户实际登录的情况下实现这一点,IE。如果您有专门的预订管理员帐户凭据,则必须对客户端凭据进行硬编码。
我在这里找到了我的答案https://stackoverflow.com/a/49814924/9105626

https://stackoverflow.com/questions/53290598
复制相似问题