null access_token
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to create 3rd party app following LTI standard. I am hosing canvas locally on VM. I am using self-signed certificate and set https requests to external tool.
I need token in order to make API calls to Canvas.
I am stuck at the step 3 of getting access_token. Even though I am able to complete step 1 (passing 'scope=/auth/userinfo') and get the code when I try to POST that code in step 3 to /login/oauth2/token along with additional parameters from spec OAuth2 - Canvas LMS REST API Documentation , I am getting JSON response in format:
{
"access_token": null,
"user: { "id" : 1,
"name": "mail@address.com"
}
}
This is my code (c#):
public static string GetAccessToken(string code)
{
string retVal = String.Empty;
string returnUrl = "https:localhost:63333/httphandlers/OAuthComplete.ashx";
string fullUrl = "http:localhost:3000/login/oauth2/token";
var request = (HttpWebRequest)WebRequest.Create(fullUrl);
request.Method = "POST";
var postData = string.Empty;
// adding post data
postData = UIHelper.AppendRequestParameter(postData, "client_id", ConfigurationManager.AppSettings[Constants.AppSettingsKeys.DeveloperClientId]);
postData = UIHelper.AppendRequestParameter(postData, "client_secret", ConfigurationManager.AppSettings[Constants.AppSettingsKeys.DeveloperSecretKey]);
postData = UIHelper.AppendRequestParameter(postData, "grant_type", "authorization_code");
postData = UIHelper.AppendRequestParameter(postData, "redirect_uri", HttpUtility.UrlEncode(returnUrl));
postData = UIHelper.AppendRequestParameter(postData, "code", code);
var data = Encoding.ASCII.GetBytes(postData.TrimStart('?'));
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
retVal = new StreamReader(response.GetResponseStream()).ReadToEnd();
return retVal;
}
It could be something trivial but I am not able to figure it out why I am not able to get access_token.
Thanks in advance,
Srdjan
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
After lot of testing, I finally found the solution and could get the access_token. I stopped passing the string 'auth/userinfo' as the scope parameter in the GET login/oauth2/auth request and the POST request returned the expected access token value.
I hope it can help you, because I think that it is not clearly described in the documentation.
This discussion post is outdated and has been archived. Please use the Community question forums and official documentation for the most current and accurate information.