Как я могу получить токен доступа для Sharepoint из WebPart? - PullRequest
0 голосов
/ 29 января 2020

У меня есть веб-сайт, где пользователи входят в систему Azure AD. Мне нужно встроить (как iframe) этот веб-сайт в int Sharepoint anet с помощью WebPart.

Как я могу получить токен доступа для Sharepoint из WebPart?.

В веб-части У меня есть что-то вроде этого:

OAUTHOKEN = ¿?
<iframe src="https://myweb.org/oauthCallback.html?token=OAUTHTOKEN" width="250px" height="250px"/>

Не могли бы вы сказать мне, как получить токен доступа?

С уважением!

1 Ответ

0 голосов
/ 29 января 2020

Поскольку вы входите в систему с Azure AD, вы должны иметь токен после входа в систему.

Вы можете обменять этот токен, используя от имени потока, чтобы получить токен, который можно использовать для SharePoint. Вы можете получить более подробную информацию по ссылке ниже о том, как использовать от имени потока: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow

Вы можете использовать функцию ниже:

public async Task<string> GetSPAccessToken(string access_token)
{
    string token = "", refresh_token = "";
    // This is to replace bearer if access_token is retrieved from HTTP Headers
    access_token = access_token.Replace("bearer ", "").Replace("Bearer ", "");
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    var keyValuePairs = new List<KeyValuePair<string, string>>();
    // Make sure you have give proper API permission to Azure AD app
    // in this case AllSites.Read
    string SPScope = "{SiteUrl}" + "/AllSites.Read";
    keyValuePairs.Add(new KeyValuePair<string, string>("scope", SPScope));
    keyValuePairs.Add(new KeyValuePair<string, string>("client_id", Client_id));
    keyValuePairs.Add(new KeyValuePair<string, string>("client_secret", Client_secret));
    keyValuePairs.Add(new KeyValuePair<string, string>("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"));
    keyValuePairs.Add(new KeyValuePair<string, string>("requested_token_use",  "on_behalf_of"));
    keyValuePairs.Add(new KeyValuePair<string, string>("assertion", access_token));
    var client1 = new HttpClient();
    var req = new HttpRequestMessage(HttpMethod.Post, "https://login.microsoftonline.com/{YOURDOMAIN}/oauth2/v2.0/token") { Content = new FormUrlEncodedContent(keyValuePairs) };

    using (var res = client1.SendAsync(req).Result)
    {
        if (res.IsSuccessStatusCode)
        {
            var jsonresult = JObject.Parse(await res.Content.ReadAsStringAsync());
            token = (string)jsonresult["access_token"];
            refresh_token = (string)jsonresult["refresh_token"];

        }
    }

    return token;
}

Я надеюсь, что это помогает!

...