0

Wir haben versucht, Anfragen mit CSOM/REST Authentication Bearer Header-Anforderungen mit einem Token an Sharepoint zu stellen. Es wird im Folgenden auf diese Frage bezogen werden:JWT CSOM/REST Azure Active Directory

C# CSOM Sharepoint Bearer request from azure active directory

Es gibt nur einen Link/Beispiel dafür ist, dass alle anderen, einschließlich der Android ADAL Ansatz funktioniert nicht funktionieren.

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

Sie scheinen so lange ein Token nicht zurück, wenn wir auf dem Token in JWT Parser betrachten, können wir user_impersonate sehen, dass die eine der scp Wert verschieden ist, die hat versagt, aber die funktionierende hat AllSites.Manage AllSites.Read AllSites.Write MyFiles.Read MyFiles.Write. Die aud URL ist auch anders, sind eine oder beide von dem Problem und wie bekomme ich es funktioniert?

Dies ist die, die versagt:

{ 
    "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" 
} 

Dies ist die, die funktioniert:

{ 
    "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" 
} 

Antwort

1

Das Zugriffstoken durch Überprüfung seiner aud Anspruch ist für die spezifische Ressource. Das erste Token wird zur Authentifizierung für Ihre benutzerdefinierte Ressource verwendet.

Um das Token für die spezifische Ressource zu erhalten, können wir den Parameter resource verwenden, um anzugeben, welche Ressource wir für das Token anfordern möchten. Zum Beispiel, wenn ich das Token für die Microsoft Graph-Ressource erhalten möchten, können wir die Anfrage wie unten konstruieren:

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] 

Wenn Sie den Zugriffstoken für https://srmukdev.sharepoint.com/ erwerben möchten, müssen Sie den Wert von resource zuweisen Parameter mit https://srmukdev.sharepoint.com/ in der Anfrage entsprechend dem Fluss, den Sie verwendeten.

Weitere Einzelheiten über die Unterstützung Azure AD fließt Zugriffstoken zu erwerben, können Sie den folgenden Link entnehmen:

Azure Active Directory Authentication Protocols

+0

Hallo Fei Xue, ja, dass das Problem war, wurde die Ressource-Namen zu ändern, was erforderlich, um . Ich kann nun Zugriff mit dem Bearer-Token erhalten, scheint jedoch nicht in der Lage zu sein, die Benutzerprofileigenschaften mithilfe der GetUserProfilePropertiesFor-Methode abzurufen, wird dies jedoch als weitere Frage aufwerfen. Danke vielmals – Andrew

Verwandte Themen