Microsoft Graph Admin同意流程不包含刷新令牌

时间:2018-10-29 12:45:03

标签: azure-active-directory microsoft-graph

是否可以在admin consent flow中获得刷新令牌? 我已经收到了water <- spTransform(water, CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")) ,但没有收到access_token,即使我在已授权中包含了refresh_token权限。

更清晰:我需要获取整个租户(组织)的驱动器文件(即获取/更新文件)。因此,我需要应用程序权限Using the admin consent endpoint
因此,为了获得整个租户 access_token,我使用了 client_credentials授予,但不幸的是,没有refresh_token才能将租户的特权时间延长至超过1小时。

  • 如果我滥用上述协议,将不胜感激

2 个答案:

答案 0 :(得分:0)

仅当两个offline_access都被请求并且您正在使用授权码授予时,才会返回刷新令牌。

更重要的是,如果您 收到access_token,则您执行“管理员同意”工作流程。管理同意书仅用于同意您的应用程序范围。 Admin Consent response不包含access_token,它仅包含租户ID(用于已同意的租户)和一个布尔值,用于告诉您是否已将同意作为查询参数:

 http://{return_uri}/?tenant=[tenant id]&admin_consent=[True/False]

如果您收到access_token,则说明您使用的是授权码,客户端凭据或隐式授权。

更新:

没有为客户端证书颁发刷新令牌,您只需根据需要从/token端点请求新令牌。

答案 1 :(得分:0)

虽然马克的答案是正确的,但我认为可以更详细地解释整个事情:

要获得对租户的完全访问权限(即不仅仅是与当前同意用户关联的资源),则需要使用“管理员同意”流程。但是,与Graph的OAuth中的其他流程不同,您不需要refresh_token来维护访问。相反,您可以在管理员同意后随时随时请求access_token。每个access_token持续60分钟。

首先使用了其他流程,例如Management API和Graph的Code Grant流程,这使我感到困惑,但实际上比这些流程更简单。

要获得同意,只需将管理员定向到以下URL:

https://login.microsoftonline.com/[Their Tenant ID]/adminconsent?client_id=[Your Client ID]&redirect_uri=[Your Redirect URI]

您的重定向URI将获得带参数的响应:

?admin_consent=True&tenant=[Their Tenant ID]

收到确认信息后,您可以随时通过发送具有以下表单字段的POST请求来请求access_token

client_id: [Your Client ID],
client_secret: [Your Client Secret],
scope: 'https://graph.microsoft.com/.default',
grant_type: 'client_credentials'

到以下URI:

https://login.microsoftonline.com/[Their Tenant ID]/oauth2/v2.0/token

响应将包含一个新的60分钟的access_token,您可以在需要时再次调用它。