Another User Struggling With Oauth


(Heath) #1

Folks, I have read the other postings about how to get the oauth tokens, but I must be missing something. I have read the docs for the web service smart apps, but I feel like mine is a little different (We all say that). I am trying to write a Windows service that will connect to the REST endpoint to grab the event logs (https://graph.api.smartthings.com/api/accounts/idHashString/events). I am trying to get an access token, but I keep getting a 404 Bad Request. I would love to share the code, but I have tried so many things that its a mess. I have used examples from sites like http://api.gettyimages.com/forum/read/184867, but no luck yet. If it helps, I am writing this in c#. Any help is appreciated. Thanks


(Joe) #2

This is my C# method for getting the access token. It isn’t perfect, but it works. Any help?

    public void getAccessToken(string OAuthCode)
    {
        string redirectUrl = Server.UrlEncode(Request.Url.GetLeftPart(UriPartial.Path));
        string url = string.Concat("https://graph.api.smartthings.com/oauth/token?grant_type=authorization_code&client_id=", this.OAuthClientId, "&client_secret=", this.OAuthClientSecret, "&redirect_uri=", redirectUrl, "&scope=app&code=", OAuthCode);

        WebRequest request = HttpWebRequest.Create(url);
        request.Proxy = null;
        using (var response = (HttpWebResponse)request.GetResponse())
        {
            if (response.StatusCode == HttpStatusCode.OK)
            {
                using (Stream stream = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                    string responseString = reader.ReadToEnd();

                    dynamic jsonResult = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString);

                    if (!string.IsNullOrWhiteSpace(Utilities.NullSafeString(jsonResult.access_token)))
                    {
                        CurrentUser.WebsiteUser.AccessToken = Utilities.NullSafeString(jsonResult.access_token);
                        CurrentUser.WebsiteUser.Save();
                    }
                }
            }
            else
            {
                // handle bad request
            }
        }
    }

(Heath) #3

Joe, thanks for the code. I think where I am getting tripped up is the redirect url. I was hoping that I could get the access token without it. I didn’t want to have to create a site just for this call. I have the client id and the client secret. I used the tool POSTMAN to get a token, but I really wanted to do it using something that was repeatable within in an app that I control. Joe, thanks for the help.