要设置什么范围和/或资源才能获得适用于 Office 365 api 的令牌?
What Scope and or resource to set to get token that works with office 365 api?
我们已在 Azure AD 中的客户端应用程序的 Office 365 管理 API 中获得了委派和应用程序 ServiceHealth.Read
权限的管理员同意。
如果我们想调用 office365 管理,我们无法弄清楚在令牌获取过程中需要什么范围和/或资源api。
是否是client_credentials
直接获取token的授予方式
或者 authorization code
then token 登录用户方法
如果是client_credentials
授权方式就更好了,但如果必须通过授权码,那也没关系。
我们已经可以使用以下内容来获取我们的报告,但不知道如何让该身份验证也涵盖 Office365 管理 API 服务健康
curl --location --request GET "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data "client_id={clientid}&client_secret={clientsecret}&scope=https://graph.microsoft.com/.default&grant_type=client_credentials"
将 ServiceHealth.Read
添加到末尾或单独添加 ServiceHealth.Read
时,它返回 invalid_scope
作为错误
当仅在范围内放置 https://manage.office.com/ServiceHealth.Read/.default
时,它会给出错误 invalid_resource
,描述包括在租户
中找不到资源
尝试获取授权代码并将资源设置为 ServiceHealth.Read
时发生了类似的问题,而将其设置为范围而不是提供授权代码时,生成的令牌被视为无效。
授权码授予流程
我通过 Azure AD 应用注册快速尝试了这一点,该应用注册具有 ServiceHealth.Read
Office 365 管理 API 的委派权限。
使用的范围值 - https://manage.office.com/ServiceHealth.Read
我能够按照授权代码授予流程成功取回访问令牌。我将分享很快传递的详细请求参数,但这应该回答您关于使用什么范围值的直接问题。
因为我使用的是 Azure AD V2 终结点,所以我并不真的需要指定资源。在您提到的示例请求中,我看到您也在使用 Azure AD V2 端点。
详细步骤
第 1 步 - 获取授权码
对于这一步,我直接使用浏览器,然后使用我的 Azure AD 租户中的有效用户登录。
// Line breaks only for clear reading. Remove line breaks and paste in browser URL to test.
https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=29a95b.....
&response_type=code
&redirect_uri=https://rohitapp/
&response_mode=query
&scope=https://manage.office.com/ServiceHealth.Read
&state=12345
响应应该类似于
https://rohitapp/?code=
OAQABAAIAAACQN9QBRU....
&state=12345&session_state=f5da06....
步骤 2 - 从令牌端点获取令牌
获取上一步的授权码。
对于这一步,我使用了 POSTMAN。您也可以使用 CURL。
POST https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
请求正文
client_id=29a95b....
&scope=https://manage.office.com/ServiceHealth.Read
&code=OAQABAAIAAACQN9QBRU....
&redirect_uri=https://rohitapp/
&grant_type=authorization_code
&client_secret=Aj....
收到最终令牌,在 https://jwt.ms
中解码
客户端凭据授予流程
使用的范围值 - https://manage.office.com/.default
我确实添加了相关的应用程序权限并同意了。
对于这个,我再次使用了 POSTMAN。您也可以使用 CURL。
POST https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
请求正文
client_id=29a95....
&scope=https://manage.office.com/.default
&grant_type=client_credentials
&client_secret=Aj....
收到最终令牌,在 https://jwt.ms
中解码
查看有关 Client Credentials Grant 的 scope
值的 Microsoft 文档。
我们已在 Azure AD 中的客户端应用程序的 Office 365 管理 API 中获得了委派和应用程序 ServiceHealth.Read
权限的管理员同意。
如果我们想调用 office365 管理,我们无法弄清楚在令牌获取过程中需要什么范围和/或资源api。
是否是client_credentials
直接获取token的授予方式
或者 authorization code
then token 登录用户方法
如果是client_credentials
授权方式就更好了,但如果必须通过授权码,那也没关系。
我们已经可以使用以下内容来获取我们的报告,但不知道如何让该身份验证也涵盖 Office365 管理 API 服务健康
curl --location --request GET "https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data "client_id={clientid}&client_secret={clientsecret}&scope=https://graph.microsoft.com/.default&grant_type=client_credentials"
将 ServiceHealth.Read
添加到末尾或单独添加 ServiceHealth.Read
时,它返回 invalid_scope
作为错误
当仅在范围内放置 https://manage.office.com/ServiceHealth.Read/.default
时,它会给出错误 invalid_resource
,描述包括在租户
尝试获取授权代码并将资源设置为 ServiceHealth.Read
时发生了类似的问题,而将其设置为范围而不是提供授权代码时,生成的令牌被视为无效。
授权码授予流程
我通过 Azure AD 应用注册快速尝试了这一点,该应用注册具有 ServiceHealth.Read
Office 365 管理 API 的委派权限。
使用的范围值 - https://manage.office.com/ServiceHealth.Read
我能够按照授权代码授予流程成功取回访问令牌。我将分享很快传递的详细请求参数,但这应该回答您关于使用什么范围值的直接问题。
因为我使用的是 Azure AD V2 终结点,所以我并不真的需要指定资源。在您提到的示例请求中,我看到您也在使用 Azure AD V2 端点。
详细步骤
第 1 步 - 获取授权码
对于这一步,我直接使用浏览器,然后使用我的 Azure AD 租户中的有效用户登录。
// Line breaks only for clear reading. Remove line breaks and paste in browser URL to test.
https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=29a95b.....
&response_type=code
&redirect_uri=https://rohitapp/
&response_mode=query
&scope=https://manage.office.com/ServiceHealth.Read
&state=12345
响应应该类似于
https://rohitapp/?code=
OAQABAAIAAACQN9QBRU....
&state=12345&session_state=f5da06....
步骤 2 - 从令牌端点获取令牌
获取上一步的授权码。
对于这一步,我使用了 POSTMAN。您也可以使用 CURL。
POST https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
请求正文
client_id=29a95b....
&scope=https://manage.office.com/ServiceHealth.Read
&code=OAQABAAIAAACQN9QBRU....
&redirect_uri=https://rohitapp/
&grant_type=authorization_code
&client_secret=Aj....
收到最终令牌,在 https://jwt.ms
中解码客户端凭据授予流程
使用的范围值 - https://manage.office.com/.default
我确实添加了相关的应用程序权限并同意了。
对于这个,我再次使用了 POSTMAN。您也可以使用 CURL。
POST https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
请求正文
client_id=29a95....
&scope=https://manage.office.com/.default
&grant_type=client_credentials
&client_secret=Aj....
收到最终令牌,在 https://jwt.ms
中解码查看有关 Client Credentials Grant 的 scope
值的 Microsoft 文档。