microsoft management c# azure oauth-2.0 azure-active-directory azure-ad-graph-api

c# - management - La llamada de Azure AD Graph para la creación del usuario falla con algún error desconocido



microsoft management azure (1)

Me han dicho que formule una pregunta acerca de Azure AD Graph Api aquí en lugar de plantearlo como un problema para el repositorio de muestra de GitHub correspondiente. Espero que el equipo de API de Azure Graph monitoree SO y pueda ayudarnos con este problema de muestra de github.

Algunos contexto extra para el problema:

Estamos utilizando Microsoft.Azure.ActiveDirectory.GraphClient nuget para crear y administrar usuarios en nuestro inquilino de prueba de Azure AD. Siguiendo esta aplicación de ejemplo, podemos crear y actualizar usuarios en Azure AD a través de Graph API. Eso estuvo bien hasta el momento en que ocurrió hace unos 2 o 3 días (sin estar seguro del momento exacto, descubrimos el problema el martes por la mañana, hora de la UA. La última carrera exitosa fue el viernes de la semana pasada). Fue un código 100% funcional y para confirmar que no es nuestro código, corrí a través de la aplicación de ejemplo otra vez, ahora también está roto. Lo he probado con el último GraphClient v2.1.0 y el original de la aplicación de ejemplo que es - v2.0.6

Para simplificar la prueba del problema, he creado una muestra basada en LINQ con algunos secretos eliminados (debe seguir la guía de muestra de la aplicación de consola para poner sus valores si desea ejecutarla, en lugar de la aplicación de muestra original). Aquí también está el Fiddle. capturas (redactadas) de

Pocas cosas a tener en cuenta en las capturas de fiddler: la API de Azure AD Graph no devuelve el token de actualización junto con el token de acceso:

{"expires_in":"3599","token_type":"Bearer","scope":"UserProfile.Read", "expires_on":"1441183928","not_before":"1441180028","resource":"https://graph.windows.net", "access_token":"TOKEN WAS HERE"}

Puedo ver el problema con la cadena de alcance aquí, pero no estamos configurando ningún alcance explícito en GraphClient cuando pedimos un token según la aplicación de muestra (y este código estaba bien antes, como mencioné antes)

La respuesta de creación del usuario es clara en términos de qué sucede y por qué sucede

{"odata.error": {"code":"Authorization_RequestDenied","message": {"lang":"en","value":"Insufficient privileges to complete the operation."} } }

Pero no está claro cómo solicitar ámbitos de permisos adicionales a través de cualquiera de estas sobrecargas del método AuthenticationContext.AcquireToken ¿ También es extraño que el mismo código fuera completamente funcional antes y se haya roto ahora, después de algún cambio misterioso?

Así que tengo algunas preguntas:

  1. Cómo agregar permisos de alcance adicionales en la biblioteca GraphClient para obtener el token de Graph API con la modificación de usuario habilitada. Esta es probablemente una solución de curita del problema.

  2. Parece que Azure AD intenta administrar los permisos para las aplicaciones cliente en el portal . Pero no hay permisos adicionales para el tipo de aplicación Native Client. ¿Cómo puedo actualizar explícitamente los permisos de la aplicación para que el código existente pueda funcionar de nuevo? ¿Es posible en absoluto?

  3. ¿Alguien puede recomendar otras bibliotecas para interactuar con GraphAPI, que permiten al consumidor especificar explícitamente el alcance del token solicitado?

================ Actualizar ================

Sí, vi esa documentación de flujo de consentimiento. Persiguiendo el problema, he creado un nuevo inquilino de Azure AD, agregué una nueva aplicación y agregué todos los derechos posibles, incluidas todas las aplicaciones disponibles y las de delegación: ahora parece esto . Yo también

Puedo obtener un token con una larga lista de ámbitos, por ejemplo,

Directory.AccessAsUser.All Directory.Read Directory.Write User.Read User.ReadWrite User.Read.All User.ReadBasic.All User.ReadWrite.All User_impersonation UserProfile.Read

--cortar ámbitos no relacionados--

Pero todavía me da 403:

{"odata.error": {"code":"Authorization_RequestDenied","message": {"lang":"en","value":"Insufficient privileges to complete the operation."} } }

Una cosa que vale la pena tener en cuenta: en la lista de ámbitos no hay Directory.ReadWrite.All

Pero aquí docs dice : Directory.ReadWrite.All : Lee y escribe datos de directorio

================ Actualizar ================

PD: algunos datos técnicos solicitados por los ingenieros de Azure AD:

  • La solicitud de respuesta de autenticación tiene una identificación de solicitud de cliente: 88b2bbbd-94cd-498d-a147-caad05e16eb7.
  • La llamada de Graphed fallida tiene una ID de solicitud de cliente: 882f3918-0ddd-40fe-a558-866997e32b46 en respuesta solamente

El problema aquí es que no ha configurado correctamente su aplicación para solicitar los permisos correctos para la API Graph. Para hacer esto, debe ingresar al Portal de administración de Azure y configurar sus ''permisos para otras aplicaciones'' para incluir los ámbitos que su aplicación necesita para poder leer / escribir en el directorio.

Aquí tenemos algunos documentos que deberían ayudarlo: https://msdn.microsoft.com/en-us/library/azure/dn132599.aspx (Describe el flujo de consentimiento) https://msdn.microsoft.com/Library/Azure / Ad / Graph / api / graph-api-permission-scopes (describe los permisos específicos que expone la API de gráficos que su aplicación deberá solicitar)

¡Espero que esto ayude!