Microsoft图形和Azure广告用户身份验证

时间:2018-06-05 11:45:28

标签: sharepoint azure-active-directory microsoft-graph

我在Azure广告中注册了一个应用程序。

当我使用以下详细信息进行ADAL时,我获得了一个用于microsoft graph api的授权令牌。

    `username      = 'admin@domain.com'
    password      = 'password123'
    client_id     = application id from azure ad
    client_secret = keys from application on azure ad
    tenant        = directory id from azure ad`

使用此令牌,我可以获取我的sharepoint帐户中所有网站的列表。

以下是我呼叫使用承载令牌获取站点的端点:         https://graph.microsoft.com/v1.0/sites?search=*

但是,当我只使用使用以下端点生成的令牌进行客户端身份验证时,Iam无法访问站点列表。         login.microsoftonline.com/tenant_id/oauth2/v2.0/token

    `grant_type : client_credentials
    clientid : client_id
    clientsecrte : client_secret
    scope : https://graph.microsoft.com`

它不会返回所有网站。

是否有办法通过客户端身份验证获取所有网站列表。

或者我可以在没有用户密码的情况下获得用户身份验证令牌。

这是我正在使用的解码令牌:     { "aud": "https://graph.microsoft.com", "iss": "https://sts.windows.net/586145ec-0428-4da6-8061-fb114257ab70/", "iat": 1528949458, "nbf": 1528949458, "exp": 1528953358, "aio": "Y2dgYLh*************xAAA=", "app_displayname": "App Name", "appid": "504ddb16-2899-48be-be57-**********", "appidacr": "1", "idp": "https://sts.windows.net/586145ec-0428-4da6-8061-fb114257ab70/", "oid": "afcf166f-24c2-49f1-b285-b672d0413c50", "roles": [ "Sites.Read.All", "Sites.ReadWrite.All", "Sites.Manage.All", "Sites.FullControl.All", ], "sub": "afcf166f-24c2-49f1-b285-b672d0413c50", "tid": "586145ec-0428-4da6-8061-fb114257ab70", "uti": "hwYd8FZCH0KruWGRFiIHAA", "ver": "1.0" }

我还获得了其他权限,但这些权限与Microsoft Graph api中的网站相关

1 个答案:

答案 0 :(得分:3)

原因:

成功的人正在使用ROPC flow,并且可以获得用户的委派权限 onbehlaf。但失败者使用的是获得应用程序权限client_credentials flow,而且不能使用该用户。

更新了答案

解决方案:(在您进行此测试之前,请确保您的租户拥有SPO许可证)

  1. 在获得令牌之前,尝试在您已注册的AAD应用中添加Sites.Read.All申请权限并执行管理员同意

  2. 如果您使用的是AAD v1端点,则可以通过点击授予权限按钮进行管理员同意。如果您使用的是v2端点,请在您的互联网上输入此类网址浏览器做管理员授权:

    https://login.microsoftonline.com/{yourtenant}/adminconsent?client_id={the applicationid of your client}&state=123&redirect_uri={the redirect uri of your app}

  3. 并使用全球管理员帐户登录并接受此权限。

    enter image description here

    1. 在我的测试实验室中,我使用了v2端点。这是我通过Postman获得的令牌: enter image description here
    2. 这是https://jwt.ms中的解码令牌,我们可以解码令牌以确保它具有我们想要的权限。

      enter image description here

      1. 然后我在脑袋中使用此标记来调用Microsoft Graph API并成功:
      2. enter image description here

        有关Microsoft Graph的网站权限的更多详情,请参阅this documentation

        请告诉我这是否有帮助!

相关问题