Microsoft 图形管理员同意流不包含刷新令牌



是否也可以在管理员同意流中获得刷新令牌?我收到了access_token,但没有收到refresh_token,尽管我已将offline_access权限包含在委派权限中。

更清楚地说:我需要获取整个租户(组织(的用户驱动器文件(即获取/更新文件(。因此,我请求应用程序权限并使用管理员同意端点
因此,我使用客户端凭据授予来获得整个租户访问权限,但遗憾的是,没有刷新权限,以便将租户的特权时间延长1小时以上

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

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

要获得对租户的完全访问权限(即,不仅仅是与当前同意用户关联的资源(,则需要使用管理同意流。但是,与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将得到带有params:的响应

?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,您可以在需要时再次调用它。

只有当请求了offline_access并且您正在使用授权代码授予时,才会返回刷新令牌。

更重要的是,如果正在接收access_token,则不是在执行管理员同意工作流。行政许可仅用于同意您的申请范围。管理员同意响应不包含access_token,它只包含租户ID(对于已同意的租户(和布尔值,该布尔值告诉您是否已授予同意作为查询参数:

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

如果您正在接收access_token,则您正在使用授权代码、客户端凭据或隐式授予。

更新:

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

最新更新