2016-11-13 5 views
2

Я играл с сервером идентификации Thinktecture, и теперь у меня есть некоторые проблемы с попыткой достичь конечной точки обновления токена.Невозможно использовать токен обновления, чтобы получить новый токен доступа и обновить токен в реализации Identity Server 3

Что у меня есть несколько клиентов, сконфигурированных как это:

Авторизация клиент коды поток:

новый клиент

{ 
    ClientId = "tripgalleryauthcode", 
    ClientName = "Trip Gallery (Authorization Code)", 
    Flow = Flows.AuthorizationCode, 
    AllowAccessToAllScopes = true, 
    RequireConsent = false, 

    RedirectUris = new List<string> 
    { 
     "redirecturi" 
    },   

    ClientSecrets = new List<Secret>() 
    { 
     new Secret("somesecret".Sha256()) 
    }      
} 

Гибридный клиент потока:

new Client 
{ 
    ClientId = "tripgalleryhybrid", 
    ClientName = "Tripgalleryhybrid (Hybrid)", 
    Flow = Flows.Hybrid, 
    AllowAccessToAllScopes = true, 

    RequireConsent = false, 

    IdentityTokenLifetime = 10, 
    AccessTokenLifetime = 120, 

    // redirect = URI of the MVC application 
    RedirectUris = new List<string> 
    { 
     "redirecturi" 
    }, 

    // Needed when requesting refresh tokens 
    ClientSecrets = new List<Secret>() 
    { 
     new Secret("somesecret".Sha256()) 
    }, 
    PostLogoutRedirectUris = new List<string>() 
    { 
     "postlogouturi" 
    } 
} 

Что я делаю, у меня есть клиент ASP.NET MVC, который использует гибридный поток. После аутентификации я получаю токен доступа, обновляю токен и некоторые другие вещи.

То, что я пытаюсь сделать, это проверить конечную точку токена обновления. Как я готовлю запрос выглядит следующим образом:

Я делаю POST запроса: /идентичности/подключение/аннулирование В заголовках запроса у меня есть:

  • Content-Type : применение/х-WWW-форм-urlencoded
  • Authorization: Basic dHJpcGdhbGxlcnlhdXRoY29kZTpteXJhbmRvbWNsaWVudHNlY3JldA == (Это base64 закодировано ClientId: clientsecret, которые являются моими теми Authorization Code)

В теле запроса у меня есть: маркера = 0a24f80dcc97a56ede0e7c04563a3493 & token_type_hint = refresh_token

Маркер является тот, который пришел после того, как моя аутентификация корыта гибридную клиента.

Когда я запускаю запрос, он возвращает Http 200. Но содержимое не возвращается. Когда я иду журналы идентификатор сервера это то, что я вижу:

SnapshotHelper::TakeSnapshotTimerCallback 
SnapshotHelper::TakeSnapshotInternal - no new files in CodeGen 
w3wp.exe Warning: 0 : 2016-11-13 13:54:11.557 +00:00 [Warning] AuthorizationCodeStore not configured - falling back to InMemory 
w3wp.exe Warning: 0 : 2016-11-13 13:54:11.620 +00:00 [Warning] TokenHandleStore not configured - falling back to InMemory 
w3wp.exe Warning: 0 : 2016-11-13 13:54:11.620 +00:00 [Warning] ConsentStore not configured - falling back to InMemory 
w3wp.exe Warning: 0 : 2016-11-13 13:54:11.620 +00:00 [Warning] RefreshTokenStore not configured - falling back to InMemory 
w3wp.exe Information: 0 : 2016-11-13 13:54:12.356 +00:00 [Information] Start token revocation request 
w3wp.exe Information: 0 : 2016-11-13 13:54:12.401 +00:00 [Information] Client secret id found: "tripgalleryauthcode" 
w3wp.exe Information: 0 : 2016-11-13 13:54:12.401 +00:00 [Information] Client validation success 
w3wp.exe Information: 0 : 2016-11-13 13:54:12.401 +00:00 [Information] End token revocation request 

То, что я действительно ожидал, чтобы получить по крайней мере, новый доступ и обновить маркеры, но ничего. Наверное, мне действительно что-то недоставало в конфигурации моих клиентов, поэтому я был бы очень рад, если бы вы могли мне помочь.

EDIT:

Я изменил конечную точку: /идентичности/подключения/маркера, а также изменили тело запроса: grant_type = refresh_token & маркер = 635c7cbcfa1c0417b6d574ade388c0d8 & token_type_hint = refresh_token, но до сих пор нет успеха.Теперь мой журнал сервера Идентичность говорит:

SnapshotHelper::TakeSnapshotTimerCallback 
SnapshotHelper::TakeSnapshotInternal - no new files in CodeGen 
SnapshotHelper::TakeSnapshot time since last: 00:19:59.9992231 
w3wp.exe Information: 0 : 2016-11-13 20:40:33.406 +00:00 [Information] Start token request 
w3wp.exe Information: 0 : 2016-11-13 20:40:33.406 +00:00 [Information] Client secret id found: "tripgalleryauthcode" 
w3wp.exe Information: 0 : 2016-11-13 20:40:33.406 +00:00 [Information] Client validation success 
w3wp.exe Information: 0 : 2016-11-13 20:40:33.406 +00:00 [Information] Start token request validation 
w3wp.exe Information: 0 : 2016-11-13 20:40:33.406 +00:00 [Information] Start validation of refresh token request 
w3wp.exe Error: 0 : 2016-11-13 20:40:33.406 +00:00 [Error] "Refresh token is missing" 
"{ 
    \"ClientId\": \"tripgalleryauthcode\", 
    \"ClientName\": \"Trip Gallery (Authorization Code)\", 
    \"GrantType\": \"refresh_token\", 
    \"Raw\": { 
    \"grant_type\": \"refresh_token\", 
    \"token\": \"635c7cbcfa1c0417b6d574ade388c0d8\", 
    \"token_type_hint\": \"refresh_token\" 
    } 
}" 
w3wp.exe Information: 0 : 2016-11-13 20:40:33.406 +00:00 [Information] End token request 
w3wp.exe Information: 0 : 2016-11-13 20:40:33.406 +00:00 [Information] Returning error: invalid_request 

ВТОРОЙ EDIT:

На основе документации размещена здесь: Token Endpoint и что внутри него здесь: TokenRequest и многие другие ресурсы, связанные с, что я пришел к этому запрос:

который я считаю правильным. К сожалению, я все еще получаю HTTP 400 от сервера идентификации с ошибкой, которая говорит: error = invalid_grant. Это заставляет меня думать, что, скорее всего, мне нужно сделать еще одну конфигурацию на моем клиенте. В некоторых примерах в Интернете я могу увидеть использование: AbsoluteRefreshTokenLifetime, SlidingRefreshTokenLifetime, RefreshTokenUsage, RefreshTokenExpiration при настройке клиента. Можете ли вы, пожалуйста, дать мне хотя бы направление копаться?

РЕШЕНИЕ:

То, что работало для меня, чтобы добавить эти параметры к клиенту: // обновить лексем опции

AccessTokenType = AccessTokenType.Jwt, 
AccessTokenLifetime = 3600, 
RefreshTokenUsage = TokenUsage.ReUse, 
RefreshTokenExpiration = TokenExpiration.Absolute, 
AbsoluteRefreshTokenLifetime = 1296000 
+0

Спасибо, ваше решение помогает мне решить мою проблему. – Hoan

ответ

2

Вы используете отозванных конечную точку, которая позволяет вам уничтожить (ака «аннулировать») токен. Чтобы использовать токен обновления для получения нового токена доступа, вы хотите, чтобы конечная точка маркера с помощью grant_type = refresh_token, как описано в документах: https://identityserver.github.io/Documentation/docsv2/endpoints/token.html

+0

Большое спасибо за ваш ответ! Я только что изменил конечную точку и немного изменил тело POST, я до сих пор не получил никакого ценного ответа. Я редактировал свой пост, и вы можете видеть, что теперь я получаю invalid_request. – user2128702

+0

вам нужно прочитать документы –

+1

Я действительно сделал, но до сих пор не знаю, почему он не работает. Я думаю, что мое редактирование должно выполнить эту работу. Я пробовал с таким телом: grant_type = refresh_token & refresh_token = 23988f082daf7bd88a3facabe54fc8d7 и до сих пор ничего. Я попытался добавить идентификатор клиента и секрет клиента как в заголовках, так и в почтовом теле, но все тот же. Здесь должна быть более общая ошибка, кроме той, которая указана для адреса конечной точки. – user2128702

Смежные вопросы