2016-08-18 173 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