Ich beginne mit meiner Frage. Wie lese ich Daten aus meinem AAD mithilfe von Microsoft Graph mithilfe einer App-Registrierung in einem Azure AD? Nun werden die Details ...Zugriff auf Microsoft Graph mit AAD App
Ich habe eine App Registrierung in meinem Azure Active Directory und erlaubt den Zugriff auf Microsoft Graph dort erstellt:
Um genau zu sein die App hat folgende Berechtigungen:
- Applikationsrechte
- aller Benutzer relevante Personen Listen lesen und den Regisseur suchen y
- Lesen Sie alle Benutzer ein Profil
- delegierte Berechtigungen (None)
ich den folgenden Code in meinem ASP.NET MVC-app verwenden, um meine Website gegen die AAD zu authentifizieren:
public void SignIn()
{
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties
{
RedirectUri = "/"
},
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
das ist so ziemlich die Standardeinstellung für organisatorische Auth. Dies funktioniert, und ich kann auch meine Benutzer Informationen aus dem AAD Profil auslesen:
private string GetUserName()
{
var claimsPrincipal = ClaimsPrincipal.Current;
var firstName = claimsPrincipal.FindFirst(ClaimTypes.GivenName).Value;
var lastName = claimsPrincipal.FindFirst(ClaimTypes.Surname).Value;
return $"{firstName} {lastName}";
}
Jetzt versuche ich, läßt das Avatar-Bild sagt Microsoft Graph zu optain zu verwenden. Es sind einige offizielle MS-Proben verfügbar here. Aber alle von ihnen verlassen sich auf ein NuGet-Paket namens Microsoft.Identity.Client
, das derzeit eine Vorschau ist. Die andere Sache ist, dass MS möchte, dass ich meine App unter Application Registration Portal registriere, was für mich keinen Sinn ergibt, weil ich bereits eine registrierte App habe.
ich versucht schon meine Inhaber Token aus meiner Ansprüche Identität abzurufen und in Graph wie folgt zu verwenden:
var ci = (System.Security.Claims.ClaimsIdentity)ClaimsPrincipal.Current.Identity;
var token = ((System.IdentityModel.Tokens.BootstrapContext)ci.BootstrapContext).Token;
var endpoint = "https://graph.microsoft.com/v1.0/me/photo/$value";
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Get, endpoint))
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStreamAsync();
}
}
}
return null;
Aber das gibt meinem 401.