0

我们一直在尝试使用带令牌的CSOM/REST身份验证承载头请求向Sharepoint发出请求。它与下面这个问题:JWT CSOM/REST Azure Active Directory

C# CSOM Sharepoint Bearer request from azure active directory

只有一个链接/例如,工程所有其他包括Android ADAL方法不起作用。

https://samlman.wordpress.com/2015/02/27/using-adal-access-tokens-with-o365-rest-apis-and-csom/

他们似乎并不长返回一个道理,当我们看看JWT解析器的道理,我们可以看到,SCP值是不同的,失败的人有user_impersonate,但工作人员有AllSites.Manage AllSites.Read AllSites.Write MyFiles.Read MyFiles.Writeaud url也是不同的,是这些问题中的一个还是两个,以及如何使它工作?

这是失败的:

{ 
    "aud": "https://srmukdev.onmicrosoft.com/3Squared-Api-Test", 
    "iss": "...", 
    "iat": ..., 
    "nbf": ..., 
    "exp": .., 
    "acr": "...", 
    "aio": "...", 
    "amr": [ 
    "pwd", 
    "mfa" 
    ], 
    "appid": "...", 
    "appidacr": "0", 
    "e_exp": ..., 
    "family_name": "...", 
    "given_name": "...", 
    "ipaddr": "...", 
    "name": "...", 
    "oid": "...", 
    "onprem_sid": "...", 
    "platf": "3", 
    "scp": "user_impersonation", 
    "sub": "...", 
    "tid": "...", 
    "unique_name": "...", 
    "upn": "...", 
    "ver": "1.0" 
} 

这是工作的那些:

{ 
    "aud": "https://srmukdev.sharepoint.com/", 
    "iss": "...", 
    "iat": ..., 
    "nbf": ..., 
    "exp": ..., 
    "acr": "...", 
    "aio": "...", 
    "amr": [ 
    "pwd", 
    "mfa" 
    ], 
    "app_displayname": "...", 
    "appid": "...", 
    "appidacr": "0", 
    "e_exp": ..., 
    "family_name": "...", 
    "given_name": "...", 
    "ipaddr": "...", 
    "name": "...", 
    "oid": "...", 
    "onprem_sid": "...", 
    "platf": "3", 
    "puid": "...", 
    "scp": "AllSites.Manage AllSites.Read AllSites.Write MyFiles.Read MyFiles.Write", 
    "sub": "...", 
    "tid": "...", 
    "unique_name": "...", 
    "upn": "...", 
    "ver": "1.0" 
} 

回答

1

的访问令牌是通过检查其aud要求的特定资源。第一个令牌用于对您的自定义资源进行身份验证。

要获取特定资源的标记,我们可以使用参数resource来指定我们要为标记请求哪个资源。例如,如果我想获得的微软图形资源令牌,我们可以构造请求如下图所示:

POST /{tenant}/oauth2/token HTTP/1.1 
Host: https://login.microsoftonline.com 
Content-Type: application/x-www-form-urlencoded 
grant_type=authorization_code 
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e 
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA 
&redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F 
&resource=https%3A%2F%2Fservice.contoso.com%2F 
&[email protected] 

如果你想获得访问令牌https://srmukdev.sharepoint.com/,您需要分配的resource值根据您使用的流程在请求中输入https://srmukdev.sharepoint.com/

关于流动Azure的AD支持,以获得访问令牌的更多细节,你可以参考以下链接:

Azure Active Directory Authentication Protocols

+0

嗨薛飞,是的,这是问题,资源名称是什么需要改变。我现在可以使用不记名令牌获得访问权限,似乎无法使用GetUserProfilePropertiesFor方法获取用户用户配置文件属性,但会引发另一个问题。非常感谢 – Andrew