繁体   English   中英

如何为Windows Phone应用程序生成刷新和访问令牌

How to generate refresh and access token for Windows phone app

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个Windows Phone 8应用,正在尝试执行Google Auth。 我进入登录页面,登录后将我带到同意页面。 单击“允许访问”后,我没有得到访问令牌并刷新令牌作为响应。

我得到的答复如下:

{
"error" : "invalid_request",
"error_description" : "Missing header: Content-Type"
}

StatusCode是错误请求

这是我的代码:

private void webBrowserGooglePlusLogin_Navigating(object sender, NavigatingEventArgs e)
    {

        if (e.Uri.Host.Equals("localhost"))
        {
            webBrowserGooglePlusLogin.Visibility = Visibility.Collapsed;
            e.Cancel = true;
            int pos = e.Uri.Query.IndexOf("=");              
            code = pos > -1 ? e.Uri.Query.Substring(pos + 1) : null;
        }
        if (string.IsNullOrEmpty(code))
        {
           // OnAuthenticationFailed();
        }
        else
        {
            var request = new RestRequest(this.TokenEndPoint, Method.POST);
            request.AddParameter("code", code);
            request.AddParameter("client_id", this.ClientId);
            request.AddParameter("client_secret", this.Secret);
            request.AddParameter("redirect_uri", "http://localhost");
            request.AddParameter("grant_type", "authorization_code");
            //request.AddHeader("Content-type", "json");

            client.ExecuteAsync<AuthResult>(request, GetAccessToken);
        }
    }

    void GetAccessToken(IRestResponse<AuthResult> response)
    {
        if (response == null || response.StatusCode != HttpStatusCode.OK
            || response.Data == null || string.IsNullOrEmpty(response.Data.access_token))
        {
           // OnAuthenticationFailed();
        }
        else
        {               
        }
    }

任何帮助表示赞赏。

1 个回复

内容类型需要设置

request.ContentType = "application/x-www-form-urlencoded";

这是我的.net示例,不确定是否可以在Windows Phone上运行,但可能有帮助

 class TokenResponse
    {
        public string access_token { get; set; }
        public string token_type { get; set; }
        public string expires_in { get; set; }
        public string refresh_token { get; set; }
    }

/// <summary>

        /// exchanges the authetncation code for the refreshtoken and access token
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static string exchangeCode(string code)
        {


            string url = "https://accounts.google.com/o/oauth2/token";
            string postData = string.Format("code={0}&client_id={1}&client_secret={2}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code", code, Properties.Resources.clientId, Properties.Resources.secret);


            // Create a request using a URL that can receive a post. 
            WebRequest request = WebRequest.Create(url);
            // Set the Method property of the request to POST.

            request.Method = "POST";

            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;
            // Get the request stream.
            Stream dataStream = request.GetRequestStream();
            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();
            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();

            TokenResponse tmp = JsonConvert.DeserializeObject<TokenResponse>(responseFromServer);

            // Display the content.
            Console.WriteLine(responseFromServer);
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();
            return tmp.refresh_token;
        }

Oauth简单

1 Windows Phone-如何刷新访问令牌?

我已使用Visual Studio 2013 Web Api模板创建了Web Api。 它可以完美地提供访问令牌和刷新令牌。 (默认行为) 但是我有一个问题:如何刷新Windows Phone应用程序的访问代码? 我是否需要使用计时器来检查到期日期并提出新的发布请求? 我很迷茫 ...

6 无法生成刷新访问令牌

我能够生成访问令牌,但响应对象为刷新令牌返回null,这是我的代码。 JavaScript的: 一旦重定向到重定向URL,以下代码将使用身份验证代码生成访问令牌: 它向我返回了访问令牌,例如: ya29.CgH2ZBKtHUBr6uJtOs8q0q2vf_tllv_UYMF ...

7 如何生成刷新令牌?

我正在我的一个节点应用程序中实现 JWT。 我想知道,是否有任何明确的格式/结构可以生成刷新令牌? 通过明确的格式,我的意思是刷新令牌是否包含任何像 JWT 这样的声明? 更新 让我们假设刷新令牌为: fdb8fdbecf1d03ce5e6125c067733c0d51de209c (取自Aut ...

8 无法生成访问令牌和刷新令牌

我正在尝试对 OneDrive 执行文件传输自动化。 为此,我需要从 Microsoft_AAD_RegisteredApps 生成访问令牌和刷新令牌。 但是,我成功地完成了前面的所有步骤。 下面是我的帖子请求 https://login.microsoftonline.com/common ...

9 访问令牌过期后生成刷新令牌

我当前遇到访问令牌过期后生成刷新令牌的问题。我正在nodejs中使用cognito-express来验证我的令牌,并且它可以成功工作。主要问题是1小时后到期的accessToken我也使用了javascript sdk amazon- cognito-identity-js但它也不起作用。所以请帮我 ...

10 监护人的问题 - 如何在登录时生成访问和刷新令牌

为了使 JWT 无效,人们使用两种方法之一 黑名单/白名单(带有 Guardian_db)。 具有短期过期访问令牌的刷新令牌(允许重新生成访问令牌)。 我不想在我的项目中使用 Guardian_db。 那么,我如何在登录端点中生成访问令牌和刷新令牌? 我的代码是: 文件 mix.ex ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM