Ich versuche, Thinktecture Identity Server 3 einzurichten, aber ich kann nicht scheinen, es ein Refresh-Token beim Austauschen eines Autorisierungscodes zurückzugeben (oder wenn ich den ResourceOwner-Fluss verwende, aber ich Ich werde mich auf den Autorisierungscode konzentrieren, da er für mich jetzt wichtiger ist. Ich bekomme Zugangstoken zurück und kann sie benutzen, um mich gut zu authentifizieren, aber es scheint nicht einmal die Aktualisierungstokens zu erzeugen, von denen ich erwarte, dass sie zurückkommen. Gibt es etwas Spezielles, das ich tun muss, damit Identity Server Refresh-Token zurückgibt?Identity Server gibt Refresh-Token nicht zurück
Ich habe die Dokumentation durchgesehen, aber habe nichts gesehen, dass ich falsch eingerichtet habe, und das einzige Ding auf ihrer Seite auf refresh tokens, das ich nicht mache, fordert explizit den "offline_access" Bereich wenn Senden Sie den Benutzer für die Authentifizierung, da, wenn ich versuche, bekomme ich einen Fehler "ungültiger Bereich". Daher nehme ich die Formulierung von Thinktecture von "Fordern Sie den Bereich offline_access (über Code- oder Ressourceneignerfluss)" an, dass der Bereich offline_access automatisch auf der Grundlage des von Ihnen verwendeten Datenflusses angefordert wird.
Ich habe versucht, ihre Beispielanwendungen zu folgen (und der Quellcode für die bestehende Owin Middleware aus dem Katana Project) so gut ich kann, und mein Setup ist wie folgt:
- ich erstellt habe ein Client, der ihre Clientklasse verwendet und Folgendes manuell angibt:
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" } };
- Ich rufe den Autorisierungsendpunkt wie folgt an:
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);
Dabei ist "Standard" ein Bereich, den ich erstellt habe. - In meinem Rückruf, nenne ich den Token-Endpunkt wie folgt:
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();
Als ich den Anruf an den Token-Endpunkt machen, meine Protokollierung auf Identity Server folgende zeigt (nach der Validierung der Autorisierungscode):
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.
Ich bin mir nicht sicher, was sonst relevant wäre, also werde ich mehr Informationen bei Bedarf bereitstellen.
Hallo, Entschuldigung für nicht verwandten Kommentar, aber gibt es sowieso ich kann die Vorlage, die Sie mit Identity-Server erstellt haben, die Refresh-Tokens, etc. generiert? –
Leider habe ich das als Teil einer Mitarbeitervergrößerung aufgebaut, auf die ich nicht mehr stehe, also habe ich weder Zugriff auf die Codebasis noch die Erlaubnis, sie zu posten. –