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