Link REST API Authentication Example
Example of C# code how to authenticate using a webclient.
the oAuth2Url is <Hostname>/identity/connect/token
and what you get back are the follow values:
access_token: the access token required for calling the api
expires_in: how long the token last.
token_type: type is bearer
refresh_token: token used to reauthenticate, will be shown later.
string credentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(_ClientId + ":" + _ClientSecret));
string urlEncodeScope = HttpUtility.UrlEncode(_ApiScope);
string body = "grant_type=password&username=" + _UserName + "&password=" + _Password + "&scope=" + urlEncodeScope;
WebClient wbclient = new WebClient();
wbclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wbclient.Headers.Add("Authorization", "Basic " + credentials);
wbclient.Headers.Add("Cache-Control", "no-cache");
var wbresponse = wbclient.UploadString(oAuth2Url, body);
dynamic obj = JsonConvert.DeserializeObject<dynamic>(wbresponse);
_Token = obj.access_token;
_ExpireTime = obj.expires_in;
_TokenType = obj.token_type;
_RefreshToken = obj.refresh_token;
this._TokenRefreshTime = DateTime.UtcNow.AddMinutes((_ExpireTime));
If your token expires, you need to reauthenticate using the refresh token, the main difference is in the grant type is now reresh_token, so you dont have to send username and password multiple times
string credentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(_ClientId + ":" + _ClientSecret));
string body = "grant_type=refresh_token&refresh_token=" + _RefreshToken + "&client_id=" + _ClientId + "&client_secret=" + _ClientSecret;
WebClient wbclient = new WebClient();
wbclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wbclient.Headers.Add("Authorization", "Basic " + credentials);
wbclient.Headers.Add("Cache-Control", "no-cache");
var wbresponse = wbclient.UploadString(oAuth2Url, body);
dynamic obj = JsonConvert.DeserializeObject<dynamic>(wbresponse);
_Token = obj.access_token;
_ExpireTime = obj.expires_in;
_TokenType = obj.token_type;
_RefreshToken = obj.refresh_token;
this._TokenRefreshTime = DateTime.UtcNow.AddMinutes((_ExpireTime));