Wie bekomme ich Azure AD OAuth2 Access Token und Refresh token für Daemon oder Server in C# ASP.NET Web-API
Implementierte ich einen Azure AD-OAuth2-Daemon oder Server ASP.NET Web-API.
Allerdings habe ich nur ein access-token, welches die Eigenschaft des AuthenticationResult. Siehe Umsetzung unten.
public IHttpActionResult GetAccessToken(string clientId, string clientkey)
{
AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential clientCredential = new ClientCredential(clientId, clientkey);
AuthenticationResult authenticationResult = authContext.AcquireTokenAsync(resourceUri, clientCredential).Result;
Authorisation authorisation = new Authorisation {access_token = authenticationResult.AccessToken,
token_type = authenticationResult.AccessTokenType,
expires_on = authenticationResult.ExpiresOn };
return Ok(authorisation);
}
Diese gibt nur access-token. Ich möchte eine Implementierung, ein Daemon oder Server-Implementierung, die gibt sowohl den Zugang als auch token und refresh token. Habt Ihr gesehen oder getan, ähnliche Umsetzung. Alle nützlichen links zu einem Beispiel, sind willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als ich gepostet diese Frage, das war die Antwort, die ich gesucht hatte, bitte siehe Screenshot unten erwartete Ergebnis-und c# - Konsole-Lösung.
Nachdem die Lösung gefunden ist, lohnt es sich, den Austausch hier, kann nützlich sein, um jemanden eines Tages
C# console app-code zu erreichen, erwartet führen der Postbote Screenshot unten
Screenshot von dem Postboten - dem Erwarteten Ergebnis. Haben Sie dieses Ergebnis in der Konsole mit Ausnahme weniger lesbar
tenant-name
eigentlich Anzeigenamen für die Anwendung?Verwendung der Anmeldeinformationen des Clients fließen. In diesem Ablauf, ein refresh-token sollte nicht enthalten sein,https://tools.ietf.org/html/rfc6749#section-4.4.3. Es sieht aus wie Sie mit ADAL v3, die sowieso nicht zurück refresh-Token (vom design), aber es nutzt Sie automatisch für Sie. Mehr info hier http://www.cloudidentity.com/blog/2015/08/13/adal-3-didnt-return-refresh-tokens-for-5-months-and-nobody-noticed/
Gibt es keine Notwendigkeit, verwenden Sie die refresh-token einlösen zu access token manuell, wenn Sie die Entwicklung mit ADAL v3.
In diesem Szenario, sollten wir nutzen die
AcquireTokenSilentAsync
und fangen Sie die Ausnahme. Nach den access_token abgelaufen ist, sollten wir re-initialisierenAuthenticationContext
aus und rufen Sie denAcquireTokenAsync
wieder um die Anfrage zu senden, um den Erwerb der access_token.Hier ist ein code-Beispiel für Ihre Referenz:
AcquireTokenSilentAsync
wirft immer eine exceptionAdalSilentTokenAcquisitionException
. Es wäre eine Lösung, wenn Sie vor Erwerb der access-token für die erste Zeit, es wirft eine Ausnahme, aber die nachfolgenden Antrag vor dem access-token abläuft gibt es das access-tokenAcquireTokenSilentAsync
arbeiten in der ersten Zeit, sollte die Anwendung rufen Sie dieAcquireTokenAsync
manuell vor dem AufrufAcquireTokenSilentAsync
. Die Initialisierung aufrufenAcquireTokenAsync
erhalten dieaccess_token
undrefresh_token
um sicherzustellen, dass der folgende AufrufAcquireTokenSilentAsync
erfolgreich.authContext
- und call -AcquireTokenAsync
um die Anfrage zu senden, um die access_token wieder, wenn die access_token abgelaufen ist. Und ich werde ändern Sie die Antworten fügen Sie ein code-Beispiel für Ihre Referenz.AcquireTokenSilentAsync
im code-Beispiel. Sie rufen nurAcquireTokenAsync
. Kann ich eine Frage stellen bitte? Kann ich Ihnen einen Benutzernamen und ein Kennwort eines Benutzers registriert in Azure AD, und verwenden Sie diese für die Authentifizierung, ohne einen login-Bildschirm?Sein scheint, Sie zu erzeugen versuchen refresh-token von Ihrem
C# ASP.NET Web API
code-Beispiel.Könnten Sie versuchen, folgenden code-snippet:
Refresh-Token-Klasse:
Refresh-Token-Methode:
Test Refresh Token:
Habe ich erfolgreich generieren, die refresh-token. Siehe Screenshot unten:
Wenn Sie noch irgendwelche Fragen haben, fühlen Sie sich frei zu teilen. Danke und happy coding!