下载时出现获取oauth2 refresh tokenToken失败是啥意思?怎么解决?谢谢!

当前位置:
联想乐商店
联想乐商店
创始人:联想
浏览:716 次
支持平台:Android
是否收费:免费
已有 0 人收藏
已有 0 人用过
服务简介手机游戏支付SDK简介:此SDK包主要面向联网游戏开发者,包括有服务器和客户端两部分。功能特色帮助常见问题哪些接口必接,哪些接口可选?必须接入的接口:SDK返回给游戏的支付结果有哪些?一共有4种返回结果,调用方必须都要处理。银联支付报错,日志显示找不到银联的资源,为什么?银联运行依赖于 .R.java这个类。 需要在混淆时,排除R.java和它的内部类。如何快速定位问题?在发布包的“log_on_jars”目录,或者“开log的jar包”目录下有,开日志的pro.jar和360SDK.jar,替换同名jar包,重新打包。卸载原来的apk,再安装新打包的apk,就可以看见详细日志,这样就可以快速定位问题了。APK自检工具是什么?接入过程中遇到的绝大多数问题是由于APK包不完整或基本设置错误导致的,该工具可以协助您在开发过程中自行检测。接入过程中遇到问题,如何联系我们?请详细阅读下面的FAQ,接入过程中常见的问题我们都给出了解答。支付回调地址填写在什么地方?为安全起见,支付回调地址不在后台填写,请在调用支付接口时填写notify_url字段。详情见接入文档支付接口部分。不用SDK的话, 如何调试AUTH CODE换TOKEN的接口?如果想手动测试完整的code换token流程, 需要先获取authorization code. SDK的登录流程里, authorization code是由SDK获取并直接返给客户端的. 如果想自己测试, 可以用下边的链接来直接访问接口, 注意替换[参数]为你自己的参数如何调试支付通知接口支付通知接口在收到支付结果通知后, 要做订单验签, 数据验证(购买商品, 金额, 用户是否吻合), 然后给用户帐户加上要买的东西. 要做的事情多, 第一次很难保证就能完全走通, 建议按照下述步骤操作如果要混淆java代码,如何配置?如果要混淆java代码,请不要混淆联编的jar包中的类。可以添加以下类到proguard配置,排除在混淆之外: 把 换为您在AndroidManifest.xml中定义的apk包名。调用支付宝时,出现崩溃错误: java.lang.NoClassDefFoundError请删除原来包含com.alipay.android.app的代码或jar包。SDK发新版了, 如何替换新包?1、注意文档开始提到的版本变化,特别是权限变化、数据格式变化;使用0.5和0.6版本SDK时, 用充值卡支付时失败, 日志有关于RSA的错误SDK包里的 open_publicKey.der 文件需要放进ASSET目录下支付时显示 获取订单失败, 找不到错误这种错误一般都是因为参数错误而导致手机号注册时, 发生了崩溃查是否漏掉了配置权限 按照DEMO包来做登录注册, 我需要修改DEMO里的哪些地方呢?1. 配置自己的APP KEY和PRIVATE KEY为什么DEMO运行时,登录特别慢?可能是请求DEMO的测试应用服务器时间过长。TOKEN指的是什么意思?开放平台颁发的TOKEN指的是access_token和refresh_token,access_token是调用所有接口的token,refresh_token只有一个作用,就是用来刷新access_token和自身(refresh_token),默认情况下说token,指的是access_token。TOKEN的有效期是多久目前设定是10小时. 有效期过后, 需要刷新TOKEN才能调用360接口. 刷新token的有效期是14天,刷新后又可顺延。有效期内, 用户再次登录, 获取的TOKEN是一样的么不一样. 每次登录都会换TOKEN. 原先的TOKEN立刻失效. 因此, 用户的每次登录, 应用都要更新TOKEN. 以防调用接口(如支付)时失败.应该怎样刷新TOKEN通过应用服务器, 调用360接口. 在用户登录时, 应用服务器维护TOKEN. 在获取TOKEN的接口返回的数据项中, 有有效期字段. 应用可以用该数据来自行维护刷新时机, 比如已经过了一半时间或者2/3时间的时候去刷一下. 另外如前所述, 每次登录的TOKEN都会换新的.使用TOKEN调用服务器端接口时失败, 显示TOKEN已失效或者过期1. 检查用户是否在线很长时间, 以至于TOKEN失效. 这样的话需要刷新TOKEN或者引导用户再登录一下 .(目前,一次TOKEN时效10小时)要做支付接入了, 有测试币吗. 如何测试支付呢?抱歉没有测试环境. 只能用真钱. 建议按照下述方法来测试Unity3D进入注册/登录页面,停留较长时间后返回游戏,发现游戏与服务器的Socket通信连接断开这是由于手机端游戏与服务器的Socket连接心跳线程优先级过低,Activity进入后台时通信线程被系统杀死所致。可以采用Service作为Socket通信心跳服务,或者将Socket通信线程优先级调高。支付时显示Mobile pay signature invalid,为什么?遇到这个对话框提示,说明客户端下单时,服务器检测到签名错误。
通常是AndroidManifest.xml中meta-data中的QHOPENSDK_PRIVATEKEY对应的value错误导致。
注意此处value为private_key,不是app_secret,其生成算法为md5(app_secret +在前一篇中,我们基于 ASP.NET Web API 与 OWIN OAuth 以&Resource Owner Password Credentials Grant 的授权方式( grant_type=password )获取到了 access token,并以这个 token 成功调用了与当前用户(resource owner)关联的 Web API。
本以为搞定了 access token 就搞定了 Web API 的验证与授权问题,可是发现 OAuth 中还有一种 token,叫 refresh token。开始的时候很是纳闷,access token 已经能解决问题,为什么要搞定两套 token,refresh token 有啥用?在纳闷之下,发出了这样的感慨:既生 access token,何生 refresh token?
后来看了一些资料,有点明白了。refresh token 是专用于刷新 access token 的 token。
为什么要刷新 access token 呢?一是因为 access token 是有过期时间的,到了过期时间这个 access token 就失效,需要刷新;二是因为一个 access token 会关联一定的用户权限,如果用户授权更改了,这个 access token 需要被刷新以关联新的权限。
为什么要专门用一个 token 去更新 access token 呢?如果没有 refresh token,也可以刷新 access token,但每次刷新都要用户输入登录用户名与密码,多麻烦。有了 refresh token,可以减少这个麻烦,客户端直接用 refresh token 去更新 access token,无需用户进行额外的操作。
两个为什么也许没有解释清楚 refresh token 的用途,下面我们用示例代码在&ASP.NET Web API 与 OWIN OAuth 中实际体验一下,或许有更直观的认识。
(一)Refresh token 的生成、发放、保存
实现一个 RefreshTokenProvider ,比如 CNBlogsRefreshTokenProvider。
需要重载 Microsoft.Owin.Security.Infrastructure.AuthenticationTokenProvider 中的 Create() 与&Receive() 方法(或者直接实现&IAuthenticationTokenProvider 接口),示例代码如下:
public class CNBlogsRefreshTokenProvider : AuthenticationTokenProvider
private static ConcurrentDictionary&string, string& _refreshTokens = new ConcurrentDictionary&string, string&();
public override void Create(AuthenticationTokenCreateContext context)
string tokenValue = Guid.NewGuid().ToString("n");
context.Ticket.Properties.IssuedUtc = DateTime.UtcN
context.Ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(60);
_refreshTokens[tokenValue] = context.SerializeTicket();
context.SetToken(tokenValue);
public override void Receive(AuthenticationTokenReceiveContext context)
if (_refreshTokens.TryRemove(context.Token, out value))
context.DeserializeTicket(value);
(注:后来采用的是重载CreateAsync()方法)
然后应用这个 CNBlogsRefreshTokenProvider:
public void ConfigureAuth(IAppBuilder app)
OAuthOptions = new OAuthAuthorizationServerOptions
TokenEndpointPath = new PathString("/token"),
Provider = new CNBlogsAuthorizationServerProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
AllowInsecureHttp = true,
RefreshTokenProvider = new CNBlogsRefreshTokenProvider()
app.UseOAuthBearerTokens(OAuthOptions);
(二)验证持有&refresh token 的客户端
重载&OAuthAuthorizationServerProvider.GrantRefreshToken() 方法,示例代码如下:
using Microsoft.Owin.Security.OA
namespace OpenAPI.Providers
public class CNBlogsAuthorizationServerProvider : OAuthAuthorizationServerProvider
public override async Task GrantRefreshToken(OAuthGrantRefreshTokenContext context)
var originalClient = context.Ticket.Properties.Dictionary["as:client_id"];
var currentClient = context.ClientId;
if (originalClient != currentClient)
context.Rejected();
var newId = new ClaimsIdentity(context.Ticket.Identity);
newId.AddClaim(new Claim("newClaim", "refreshToken"));
var newTicket = new AuthenticationTicket(newId, context.Ticket.Properties);
context.Validated(newTicket);
await base.GrantRefreshToken(context);
为了验证client_id,需要在&GrantClientCredentials() 重载方法中保存client_id至context.Ticket:
namespace OpenAPI.Providers
public class CNBlogsAuthorizationServerProvider : OAuthAuthorizationServerProvider
public override async Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
var props = new AuthenticationProperties(new Dictionary&string, string&
{ "as:client_id", context.ClientId }
var ticket = new AuthenticationTicket(oAuthIdentity, props);
context.Validated(ticket);
只需实现上面这些代码,其他的都由&Microsoft.Owin.Security.OAuth 帮你代劳了。
(三)测试客户端获取 refresh token
客户端获取 access token 与 refresh token 是一起的,示例代码如下:
public async Task GetAccessTokenTest()
var clientId = "[clientId]";
var clientSecret = "[clientSecret]";
var parameters = new Dictionary&string, string&();
parameters.Add("grant_type", "password");
parameters.Add("username", "[username]");
parameters.Add("password", "[password]");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId + ":" + clientSecret)));
var response = await _httpClient.PostAsync("/token", new FormUrlEncodedContent(parameters));
var responseValue = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseValue);
运行结果:
"access_token": "D3VjxsFvr...",
"token_type": "bearer",
"expires_in": 86399,
"refresh_token": "7f7edd15cba043c29d6eb1"
成功拿到了 access token。
(四)测试客户端用 refresh token 刷新 access token
客户端测试代码如下:
public async Task GetAccessTokenByRefreshTokenTest()
var clientId = "[clientId]";
var clientSecret = "[clientSecret]";
var parameters = new Dictionary&string, string&();
parameters.Add("grant_type", "refresh_token");
parameters.Add("refresh_token", "7f7edd15cba043c29d6eb1");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId + ":" + clientSecret)));
var response = await _httpClient.PostAsync("/token", new FormUrlEncodedContent(parameters));
var responseValue = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseValue);
注:这段客户端代码与前一步中客户端代码的主要区别是少了下面传递&resource owner 用户名与密码的代码,这就是 refresh token 的用途所在 && 不需要用户名与密码就可以刷新 access token。
parameters.Add("username", "[username]");
parameters.Add("password", "[password]");
运行结果:
"access_token": "[new access token]",
"token_type": "bearer",
"expires_in": 86399,
"refresh_token": "[new refresh token]"
看起来挺简单,却折腾了一天。 希望在你折腾OAuth的时候,这篇博文能够帮你减少折腾的时间。
【参考资料】
阅读(...) 评论()$token-&refresh_token这个是什么意思?_百度知道
$token-&refresh_token这个是什么意思?
weixin.&#39.com/sns/oauth2/refresh_token.refresh_token
你看下前面有没创建一个叫$token的对象,对象有没有一个成员变量叫refresh_token,如果有,就是那个了
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁access token已过期,怎么用refreshtoken刷新accesstoken_百度知道
access token已过期,怎么用refreshtoken刷新accesstoken
提问者采纳
Accesstoken的有效期是一个月,refreshtoken的有效期是两个月,所谓的长期有效是:用refreshtok俯订碘寡鄢干碉吮冬经en不断刷新得到新的 Accesstoken和refreshtoken,除非用户两个月没有访问过app,导致refreshtoken也失效了,这时候就需要用户重新登录了.
其他类似问题
为您推荐:
狗狗的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。}

我要回帖

更多关于 oauth refresh token 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信