我在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中的网站相关
答案 0 :(得分:3)
原因:
成功的人正在使用ROPC flow
,并且可以获得用户的委派权限 onbehlaf。但失败者使用的是获得应用程序权限的client_credentials flow
,而且不能使用该用户。
更新了答案
解决方案:(在您进行此测试之前,请确保您的租户拥有SPO许可证)
在获得令牌之前,尝试在您已注册的AAD应用中添加Sites.Read.All
申请权限并执行管理员同意。
如果您使用的是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}
并使用全球管理员帐户登录并接受此权限。
这是https://jwt.ms中的解码令牌,我们可以解码令牌以确保它具有我们想要的权限。
有关Microsoft Graph的网站权限的更多详情,请参阅this documentation。
请告诉我这是否有帮助!