Identity Server não retornando token de atualização
Estou tentando configurar o Identity Server 3 do Thinktecture, mas não consigo fazer com que ele retorne um token de atualização ao trocar um código de autorização (ou ao usar o fluxo ResourceOwner, mas vou focar no código de autorização porque é mais importante para mim agora). Eu recebo tokens de acesso e posso usá-los para autenticar corretamente, mas nem parece estar gerando os tokens de atualização que espero recuperar. Há algo de especial que preciso fazer para que o Identity Server retorne tokens de atualização?
Examinei a documentação, mas não vi nada que eu configurei errado, e a única coisa na página deles ematualizar tokens o que não estou fazendo é solicitar explicitamente o escopo "offline_access" ao enviar o usuário para autenticação, pois sempre que tento recebo um erro "escopo inválido". Portanto, estou usando o fraseado do Thinktecture de "Solicitar o escopo offline_access (via código ou fluxo do proprietário do recurso)" para significar que o escopo offline_access é algo solicitado automaticamente com base no fluxo que você está usando.
Eu tenho tentado seguir seus aplicativos de amostra (e o código fonte do Owin Middleware existente doKatana Project) da melhor maneira possível e minha configuração é a seguinte:
Eu criei um cliente usando sua classe de cliente, especificando manualmente o seguinte:var client = new Client() { ClientId = "SomeId", ClientName = "Client with Authentication Code Flow", RequireConsent = false, //Setting this to true didn't help Flow = Flows.AuthorizationCode, ClientSecrets = new List() { new ClientSecret("secret") }, RedirectUris = new List() { "localhost:/specific-redirect-path" } };Estou fazendo uma chamada para o terminal de autorização da seguinte maneira:
var authorizationEndpoint = AuthorizationEndpointBase + "?client_id=" + Uri.EscapeDataString(Options.ClientId) + "&scope=Default" + "&response_type=code" + "&redirect_uri=" + Uri.EscapeDataString(redirectUri) + "&state=" + Uri.EscapeDataString(state); Response.Redirect(authorizationEndpoint);onde "Padrão" é um escopo que eu criei.No meu retorno de chamada, chamo o ponto de extremidade do token da seguinte maneira:
IReadableStringCollection query = Request.Query; string code = getValueFromQueryString("code", query); var tokenRequestParameters = new List>() { new KeyValuePair("client_id", Options.ClientId), new KeyValuePair("redirect_uri", GenerateRedirectUri()), new KeyValuePair("client_secret", Options.ClientSecret), new KeyValuePair("code", code), new KeyValuePair("grant_type", "authorization_code"), }; var requestContent = new FormUrlEncodedContent(tokenRequestParameters); HttpResponseMessage response = await _httpClient.PostAsync(TokenEndpoint, requestContent, Request.CallCancelled); response.EnsureSuccessStatusCode(); string oauthTokenResponse = await response.Content.ReadAsStringAsync();
Quando faço a chamada para o terminal do token, meu logon no Identity Server exibe o seguinte (após a validação do código de autorização):
iisexpress.exe Information: 0 : [Thinktecture.IdentityServer.Core.Validation.TokenRequestValidator]: 7/13/2015 1:44:07 PM +00:00 -- Token request validation success { "ClientId": "SomeId", "ClientName": "Client with Authentication Code Flow", "GrantType": "authorization_code", "AuthorizationCode": "f8f795e649044067ebd96a341c5af8c3" } iisexpress.exe Information: 0 : [Thinktecture.IdentityServer.Core.ResponseHandling.TokenResponseGenerator]: 7/13/2015 1:44:07 PM +00:00 -- Creating token response iisexpress.exe Information: 0 : [Thinktecture.IdentityServer.Core.ResponseHandling.TokenResponseGenerator]: 7/13/2015 1:44:07 PM +00:00 -- Processing authorization code request Debug: [Thinktecture.IdentityServer.Core.Services.Default.DefaultTokenService]: 7/13/2015 1:44:07 PM +00:00 -- Creating access token Debug: [Thinktecture.IdentityServer.Core.Services.Default.DefaultTokenService]: 7/13/2015 1:44:07 PM +00:00 -- Creating reference access token iisexpress.exe Information: 0 : [Thinktecture.IdentityServer.Core.Endpoints.TokenEndpointController]: 7/13/2015 1:44:07 PM +00:00 -- End token request iisexpress.exe Information: 0 : [Thinktecture.IdentityServer.Core.Results.TokenResult]: 7/13/2015 1:44:07 PM +00:00 -- Returning token response.
Não tenho certeza do que mais seria pertinente, por isso fornecerei mais informações conforme necessário.