Я играл с сервером идентификации 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
Спасибо, ваше решение помогает мне решить мою проблему. – Hoan