OAuth2 Resource Owner Password Grant a través de API

Actualmente estoy creando una API que requiere OAuth2, pero no puedo encontrar una biblioteca para usar que maneje el inicio de sesión único en una aplicación móvil nativa solo a través de la API RESTful. La mayoría de las que he encontrado solo tienen una ventana emergente web, que ha sido vetada para este proyecto. B2C, que está funcionando actualmente, no es capaz de usar ROPG. ¿Hay alguna manera de configurar esto fácilmente con otra biblioteca usando C # .NET y Azure?

ACTUALIZAR:

Intentando usar B2C según la respuesta de Fei Xue a continuación, llegamos al punto de obtener un token de acceso de Microsoft Graph. En el cuerpo de la POST, hicimos lo siguiente:

resource = https% 3A% 2F% 2FGraph.windows.net & client_id = [Configuración B2C - Aplicaciones - AppId] & grant_type = contraseña y nombre de usuario = rob% 40 [inquilino] .onmicrosoft.com & password = [contraseña] & client_secret = [Configuración B2C - Aplicaciones - Clave de aplicación - client_secret]

Nuestro error con el espacio de nombres se debió a los nombres de usuario que estábamos intentando. Este es un inquilino B2C que usa el correo electrónico como nombre de usuario y esa fue la razón del error del espacio de nombres. La única forma de superar ese error fue crear un usuario B2C con la dirección de correo electrónico que termina en el inquilino, de esta manera:

rob @ [inquilino] .onmicrosoft.com

Ahora estamos obteniendo un token de acceso, pero ese token no se autentica con nuestra aplicación api del servicio de aplicaciones azure, que era el objetivo original.

Lo que estamos tratando de lograr es enviar el nombre de usuario y la contraseña que son válidos para un inicio de sesión B2C y obtener un IdToken o Token de acceso que sea válido para la aplicación api. La aplicación api se conecta a B2C a través de la configuración de autenticación del servicio de aplicaciones configurada para AAD con el ID del cliente y la configuración secreta desde la aplicación de configuración B2C.

ACTUALIZAR:

Intentando pasar a través del token graph.windows.net para la autenticación en nuestra API web de Azure, agregamos enhttps://Graph.windows.net audiencia de token permitida en nuestro Servicio de aplicaciones - Autenticación - Configuración de autenticación de Active Directory.

Sin embargo, pasar el token de acceso al gráfico en el encabezado del portador a la API todavía da como resultado

"Se ha denegado la autorización para esta solicitud".

Descubrimos que si ponemos la URL del emisor en blanco como en el ejemplo a continuación, ¡ahora acepta el token Graph!

Sin embargo, esto causa problemas al intentar golpear

https: // [our_web_app] .azurewebsites.net / .auth / login / aad

Ahora va al inicio de sesión común de Microsoft. Anteriormente se dirigía a nuestra política de registro de B2C porque la URL del emisor estaba configurada para:

https://login.microsoftonline.com/[tenantnamefont>.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=[B2C_SignUpIn_Policy]

De hecho, si también extraemos la política desde nuestra aplicación (que funcionaba antes de eliminar la URL del emisor) a la política de inicio de sesión, podemos iniciar sesión, pero eso devolvió el token de acceso ahora siempre como No autorizado en la API web llamadas.

¿Se debe dejar en blanco la URL del emisor?

Además, dado que deja en blanco la URL del emisor, el servidor tarda mucho más en responder a las llamadas API cuando enviamos una solicitud utilizando un token de acceso Graph en el portador de autorización de encabezado. Pasó de tomar aproximadamente 1-2 segundos (usando un token de acceso B2C válido obtenido de MSAL o el inicio de sesión web anterior) a tomar aproximadamente 10-15 segundos para responder que es una solicitud autenticada. Ese tipo de velocidad es un espectáculo para nosotros.¿Validar una llamada gráfica de esta manera normalmente tarda tanto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta