Reputation: 189
We've a customer requirement to authenticate to sharepoint online using sharepoint app-only model.Obtained access token by posting a request to Microsoft Azure ACS," https://accounts.accesscontrol.windows.net/cde6fa59-abb3-4971-be01-2443c417abcd/tokens/OAuth/2" with client_credentials in request body using postman tool.
As access token expires, how to get refresh token?
From the above request, we only get access token. Do we've a separate endpoint to retrieve refresh token.
Upvotes: 5
Views: 859
Reputation: 1862
The approach to consume Refresh Token is using Cookies to help the client reneew credentials. In this documenation Authorization Code OAuth flow for SharePoint Add-ins contains an example with C# Programming to get Refresh Token from 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);
}
}
}
}
Upvotes: 0