【问题标题】:How could I get the access token for Sharepoint from a WebPart?如何从 WebPart 获取 Sharepoint 的访问令牌?
【发布时间】:2020-05-14 16:47:06
【问题描述】:

我有一个用户登录 Azure AD 的网站。我需要将这个网站(作为 iframe)嵌入到带有 WebPart 的 Sharepoint 内部网中。

如何从 WebPart 获取 Sharepoint 的访问令牌?

在 webpart 我有这样的东西:

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

您能告诉我获取访问令牌的方法吗?

问候!

【问题讨论】:

  • 知道你找到了答案会很有趣。请分享。

标签: azure iframe sharepoint web-parts


【解决方案1】:

由于您是针对 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;
}

我希望这会有所帮助!

【讨论】:

  • 嗨,Sushrut。感谢您的答复。你能给我使用这个功能的上下文吗?如何获取参数:access_token?问候
  • 我重新阅读了你的问题,我认为我上面的代码是从应用程序访问令牌获取 SharePoint 访问令牌的另一种方式。要获取 SharePoint 访问令牌,您可以尝试:advaiya.com/blog/access-sharepoint-rest-api-using-oauth,然后使用您代表流使用的 SharePoint 访问令牌来获取 Azure AD 应用程序的访问令牌。对不起,如果我感到困惑。
猜你喜欢
  • 2020-08-03
  • 2017-11-02
  • 1970-01-01
  • 2012-08-02
  • 2012-09-16
  • 2013-03-30
  • 2021-11-10
  • 2023-03-07
  • 2012-04-09
相关资源
最近更新 更多