如何获取仅限 Sharepoint 应用程序模型的刷新令牌?

pra*_*gam 5 oauth acs sharepoint-apps sharepoint-online

我们有客户要求使用仅共享点应用程序模型对共享点进行在线身份验证。通过向 Microsoft Azure ACS 发布请求来获取访问令牌,” https://accounts.accesscontrol.windows.net/cde6fa59-abb3-4971-be01 -2443c417abcd/tokens/OAuth/2”,使用 postman 工具在请求正文中包含 client_credentials。

访问令牌过期后,如何获取刷新令牌?

从上面的请求中,我们只获得访问令牌。我们是否有一个单独的端点来检索刷新令牌。

请帮忙。在此输入图像描述

Ant*_*rdo 0

消耗 Refresh Token 的方法是使用 Cookie 来帮助客户端更新凭证。在本文档中,SharePoint 加载项的授权代码 OAuth 流包含一个使用 C# 编程从 Cookie 获取刷新令牌的示例。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.SharePoint.Samples;

namespace DynamicAppPermissionRequest
{
  public static class TokenCache
  {
    private const string REFRESH_TOKEN_COOKIE_NAME = "RefreshToken";

    public static void UpdateCacheWithCode(HttpRequest request,
                                            HttpResponse response,
                                            Uri targetUri)
    {
      string refreshToken =
          TokenHelper.GetAccessToken(
              request.QueryString["code"],
              "00000003-0000-0ff1-ce00-000000000000",
              targetUri.Authority,
              TokenHelper.GetRealmFromTargetUrl(targetUri),
              new Uri(request.Url.GetLeftPart(UriPartial.Path))
          ).RefreshToken;
      SetRefreshTokenCookie(response.Cookies, refreshToken);
      SetRefreshTokenCookie(request.Cookies, refreshToken);
    }

    internal static string GetCachedRefreshToken(HttpCookieCollection requestCookies)
    {
      return GetRefreshTokenFromCookie(requestCookies);
    }

    internal static bool IsTokenInCache(HttpCookieCollection requestCookies)
    {
      return requestCookies[REFRESH_TOKEN_COOKIE_NAME] != null;
    }

    private static string GetRefreshTokenFromCookie(HttpCookieCollection cookies)
    {
      if (cookies[REFRESH_TOKEN_COOKIE_NAME] != null)
      {
        return cookies[REFRESH_TOKEN_COOKIE_NAME].Value;
      }
      else
      {
        return null;
      }
    }

    private static void SetRefreshTokenCookie(HttpCookieCollection cookies, string refreshToken)
    {
      if (cookies[REFRESH_TOKEN_COOKIE_NAME] != null)
      {
        cookies[REFRESH_TOKEN_COOKIE_NAME].Value = refreshToken;
      }
      else
      {
        HttpCookie cookie = new HttpCookie(REFRESH_TOKEN_COOKIE_NAME, refreshToken);
        cookie.Expires = DateTime.Now.AddDays(30);
        cookies.Add(cookie);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)