2016-08-18 170 views
0

与许多人一样,我使用Taiser Joudah文章创建我的刷新令牌提供程序(以及他的另一篇用于创建访问令牌的文章)。对我来说奇怪的是,它在我的本地服务器上正常工作,但当我将它移动到另一台服务器时失败。 Auth和Resource服务器都是同一台服务器(实际上是同一个应用程序)。不知道在不同的服务器上可能会有什么不同。我跟踪了SQL,它执行令牌的获取和删除,因此我知道它正在执行代码,但刷新每次都会返回invalid_grant并且用户已注销。OAuth刷新令牌返回invalid_grant

回答

0

这是我在文章中看到的唯一的地方,invalid_grant返回:

using (AuthRepository _repo = new AuthRepository()) 
{ 
    IdentityUser user = await _repo.FindUser(context.UserName, context.Password); 

    if (user == null) 
    { 
     context.SetError("invalid_grant", "The user name or password is incorrect."); 
     return; 
    } 
} 

你是不是您的非本地服务器上的用户名/密码?

如果你的本地和非本地服务器不共享相同的DB:

  • 你可能会使用无效的刷新令牌,或者它已过期或撤销
  • 使用可能不匹配的客户端证书刷新令牌的客户端发送到

它也可能是重定向URI不同于本地服务器与非本地服务器。

invalid_grant 
    The provided authorization grant (e.g., authorization 
    code, resource owner credentials) or refresh token is 
    invalid, expired, revoked, does not match the redirection 
    URI used in the authorization request, or was issued to 
    another client. 

https://tools.ietf.org/html/rfc6749#section-5.2

+0

我中有你显示相同的invalid_grant代码,但是这是在用于初始登录的GrantOwnerResourceCredentials方法。至于规范中的invalid_grant原因,我没有看到其中的哪一个适用。像过期和/或重定向URI(因为这不是第三方身份验证提供程序实现而未指定)的刷新标记参数不会更改,并且它绝对不会发布给其他客户端,也不会被撤销。 – HisDivineShadow

+0

@HisDivineShadow让您的本地和非本地服务器共享相同的数据库?此外,任何时间偏差的机会? – neverendingqs

+0

不,本地和dev实例使用自己的DB(在不同的DB服务器上)。访问令牌和刷新令牌在同一应用内的同一台服务器上生成时,会出现什么样的时间偏差? – HisDivineShadow