python - tipos - Graph API autenticarse como usuario mediante programación
token para api (2)
Estoy tratando de obtener un token de portador de OAuth2 de usuario específico utilizando la solicitud HTTP POST, y nada parece funcionar.
login_url = ''https://login.microsoftonline.com/''
authorize_endpoint = ''{0}{1}{2}''.format(login_url,config.tenant_id,''/oauth2/authorize'')
bodyvals = {''client_id'': config.client_id,
''client_secret'': config.client_secret,
''grant_type'': ''client_credentials'',
''resource'':config.resource_endpoint}
return requests.post(authorize_endpoint, data=bodyvals)
El código anterior funciona, pero genera un token en nombre de la aplicación.
Parece que no puedo encontrar una manera de pasar las credenciales de los usuarios, y no hay documentación sobre esto en absoluto.
En general, no me importa si la respuesta está en Python o Powershell o simplemente en una explicación general, simplemente no parece entender cómo hacer eso correctamente con AAD.
Para GraphAPI, el recurso es " https://graph.windows.net/ "
Si no quieres usar ADAL , puedes echarle un vistazo al código para usar el "recurso". Este escenario está cubierto, así que considere ADAL como una gran muestra :)
Además, msrestazure tiene una instancia UserPassCredentials que también funciona en GraphAPI.
Puede hacerlo manualmente, vea mi otra respuesta aquí: https://.com/a/40844983/1658906 .
Debe usar grant_type=password
y llamar al punto final oauth2/token
. Aquí está la versión de C # para la autenticación:
private async Task<string> GetAccessToken()
{
string tokenEndpointUri = Authority + "oauth2/token";
var content = new FormUrlEncodedContent(new []
{
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", Username),
new KeyValuePair<string, string>("password", Password),
new KeyValuePair<string, string>("client_id", ClientId),
new KeyValuePair<string, string>("client_secret", ClientSecret),
new KeyValuePair<string, string>("resource", PowerBiResourceUri)
}
);
using (var client = new HttpClient())
{
HttpResponseMessage res = await client.PostAsync(tokenEndpointUri, content);
string json = await res.Content.ReadAsStringAsync();
AzureAdTokenResponse tokenRes = JsonConvert.DeserializeObject<AzureAdTokenResponse>(json);
return tokenRes.AccessToken;
}
}
En la solicitud debe especificar:
- Nombre de usuario
- Contraseña
- Identificación del cliente
- Secreto del cliente
- El URI de recursos