是否可以在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小时。
答案 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
,您可以在需要时再次调用它。