ADAL v3 hat die UserPasswordCredential-Klasse, aber ich kann keine funktionierende Implementierung finden. Es gibt keine AcquireToken-Überladung, die einen UserPasswordCredential- oder UserCredential-Typ akzeptiert. Was ist die korrekte Art, den Benutzernamen & Passwortfluss in ADAL v3 auszuführen? Dieses spezielle Stück Code verwendet volles .Net 4.5.ADAL v3: Wie authentifiziere ich mich mit UserPasswordCredential?
Antwort
Wenn Sie mit Client-Anwendung zu entwickeln wurden, können Sie den Code beziehen sich unter den Token zu erwerben:
string authority = "https://login.microsoftonline.com/xxxx.onmicrosoft.com";
string resrouce = "https://graph.windows.net";
string clientId = "";
string userName = "";
string password = "";
UserPasswordCredential userPasswordCredential = new UserPasswordCredential(userName,password);
AuthenticationContext authContext = new AuthenticationContext(authority);
var token= authContext.AcquireTokenAsync(resrouce,clientId, userPasswordCredential).Result.AccessToken;
Und wenn Sie mit Web-App zu entwickeln wurden (dies ist kein gängiges Szenario), gibt es keine solche Methode in ADAL V3, um dieses Szenario zu unterstützen. Als Workaround können Sie die Anfrage selbst erstellen. Hier ist ein Beispiel für Ihre Referenz:
POST: https://login.microsoftonline.com/xxxxx.onmicrosoft.com/oauth2/token
Content-Type: application/x-www-form-urlencoded
resource={resource}&client_id={clientId}&grant_type=password&username={userName}&password={password}&scope=openid&client_secret={clientSecret}
auf dem zweiten Teil der akzeptierte Antwort zu erarbeiten, hier ist eine Implementierung der POST-Anforderung zu machen:
From SettingHelper: public static string GetAuthorityEndpoint(string azuretenantId) => $"https://login.microsoftonline.com/{azuretenantId}/";
private static async Task<OAuthResult> AuthenticateAsync(string resource = "https://yourAzureADProtectedResource.url/")
{
var oauthEndpoint = new Uri(new Uri(SettingsHelper.GetAuthorityEndpoint("your AAD Tenent ID")), "oauth2/token");
using (var client = new HttpClient())
{
var result = await client.PostAsync(oauthEndpoint, new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("resource", resource),
new KeyValuePair<string, string>("client_id", "your AAD App Id"),
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", "[email protected]"),
new KeyValuePair<string, string>("password", "your password"),
new KeyValuePair<string, string>("scope", "openid"),
new KeyValuePair<string, string>("client_secret", "an access key for your AAD App"),
}));
var content = await result.Content.ReadAsStringAsync();
var authResult = JsonConvert.DeserializeObject<OAuthResult>(content);
return authResult;
}
}
class OAuthResult
{
public string Token_Type { get; set; }
public string Scope { get; set; }
public int Expires_In { get; set; }
public int Ext_Expires_In { get; set; }
public int Expires_On { get; set; }
public int Not_Before { get; set; }
public Uri Resource { get; set; }
public string Access_Token { get; set; }
}
Sie können dann mit gehen zu das Auth Ergebnis wie folgt:
private async Task<HttpClient> GetHttpClientWithAzureADAuthentication()
{
OAuthResult authResult;
try
{
authResult = await AuthenticateAsync();
var httpClient = GetHttpClient();
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {authResult.Access_Token}");
return httpClient;
}
catch (Exception e)
{
Debug.WriteLine(e);
throw;
}
}
Offensichtlich würden Sie keine Dinge hart programmieren Hier sind sie hier, um die Lösung zu veranschaulichen :) –
- 1. Wie authentifiziere ich mich mit Facebook ID mit AWS Cognito?
- 2. ADAL .Net Core nuget-Paket unterstützt UserPasswordCredential nicht
- 3. Wie authentifiziere ich mich mit Spnego/Kerberos und Apache HttpClient?
- 4. Unity/Firebase Wie authentifiziere ich mich mit Google?
- 5. Wie authentifiziere ich mich mit einem API-Schlüssel gegen GitHub?
- 6. Wie authentifiziere ich mich gleichzeitig an 2 verschiedenen symfony2 Firewalls?
- 7. Verwendung von cloneCollection in MongoDB: Wie authentifiziere ich mich?
- 8. Wie authentifiziere ich mich bei der GoodData API?
- 9. Wie authentifiziere ich mich an externe Resturl in web api
- 10. Wie authentifiziere ich mich über ASP.NET-Webdienstcode bei Active Directory?
- 11. Wie authentifiziere ich mich bei einem AWS Cognito User Pool
- 12. AngularJS - Wie authentifiziere ich mich bei der ersten Einreichung?
- 13. Zwischenspeichern von Aktualisierungstoken mit ADAL v3 und Windows Credential Manager
- 14. Wie authentifiziere ich mich mit Woocommerce API mit HTTPS (Basic Auth)
- 15. Wie authentifiziere ich Mendeley mit OAuth2
- 16. Wie authentifiziere ich Ejabberd mit Django?
- 17. Wie authentifiziere ich einen Benutzer mit AuthLogic
- 18. (Softlayer api) Wie bekomme ich Verbindungsinformationen für evault webcc und authentifiziere mich mit dem Internet?
- 19. Wie authentifiziere ich mich mit einem ISA-Proxy von meiner Anwendung aus?
- 20. Wie authentifiziere ich mich mit Javascript an einer MS CRM 2016 IFD-Instanz?
- 21. Wie authentifiziere ich mich am besten in einer Chrome-Erweiterung mit Facebook?
- 22. Wie authentifiziere ich Apache Solr?
- 23. Wie benutze ich stattdessen die Telefonnummer, wenn ich mich in Laravel 5.2 authentifiziere?
- 24. Wie authentifiziere ich Java, um URL abzurufen
- 25. Wie authentifiziere ich einen Ruhezustand im Firebase?
- 26. Wie authentifiziere ich mich korrekt in Mongo für einen Benutzer, der Zugriff auf mehrere Datenbanken hat?
- 27. Wie authentifiziere ich mich mithilfe des TFS SDK mithilfe einer Webanwendung?
- 28. Wie authentifiziere ich mich bei meinen ASPNET-Benutzern und -Rollen, die in meiner Datenbank gespeichert sind?
- 29. Wie kann ich mich bei Azure gehosteten und Active Directory geschützten API App ohne ADAL anmelden?
- 30. Wie authentifiziere ich einen WCF-Datenservice?
Danke. Die neue Dokumentations-Site auf docs.microsoft.com ist unglaublich schwer zu lesen, was adal v3 unnötig schwer macht, imho. – Trondh
Wo verwenden wir in diesem Fall das Client-Geheimnis? Ich denke, wir brauchen es. – Kurkula
@Trondh DITTO, ich bin so müde, SO viel Zeit damit zu verschwenden, diesen Mist zu jagen – Mikee