Comprender la concesión de Client_credentials de OpenId Connect en términos de identidad

2

Tengo problemas para entender la concesión client_credentials en términos de identidad. Aseguré mi aplicación web con OpenId Connect usando el flujo de código de autorización. Esto funciona como se esperaba y el servidor de autorización devuelve un token de identificación y acceso adecuados. Hasta aquí todo bien.

Ahora tengo algunas API públicas a las que quiero dar acceso a mis clientes. El acceso a estas API se realiza a través de nuestras diferentes bibliotecas cliente que proporcionamos.

En muchos ejemplos, el client_credentialsflujo se usa para proporcionar un CLIENT_ID y un CLIENT_SECRET para obtener un token de acceso. De acuerdo con la especificación, este flujo no involucra al usuario final y, por lo tanto, no se devuelve ningún token de identidad.

Ahora estoy en problemas porque no conozco la identidad de la persona que llama. Lo único que puedo decir es que el token de acceso es válido, pero ¿cómo se hace esto en la práctica?

¿Cómo sabe qué usuario llamó a su servicio cuando usa este flujo? ¿Tengo que guardar un mapeo de user_account a client_id / client secret y consultarlo en mi punto final de api para obtener el usuario? Tengo que tomar algunas decisiones de acceso en función de la identidad de quien llamó al servicio.

Si eso fuera cierto, ¿qué beneficio me brinda OpendId Connect de esa manera cuando no puedo obtener un token de identificación en ese flujo? Hacer esto con un flujo simple de client_credentials de Oauth2 conducirá al mismo resultado.

¿Alguien puede darme algunos consejos?

4

El client_credentialsflujo no está diseñado para usarse en escenarios en los que desea identificar a un usuario final. De hecho, el client_credentialstipo de subvención no está definido en OpenID Connect. Debe confiar en la concesión del Código de autorización como sugiere.

4
  • ¿Pero eso significa que mis clientes nunca podrán acceder a mis API sin interactuar antes con el agente de usuario?
    Jay
    10/07/2017 a las 19:56
  • @Jay, no necesita OpenID Connect para las interacciones entre un cliente y una API. OAuth2 es suficiente en este caso. 11/07/2017 a las 8:04
  • ¿Y cómo sé QUIÉN está llamando a mi API? Por ejemplo, ¿qué cliente cuando no tengo ningún tipo de información de identidad?
    Jay
    11/07/2017 a las 8:47
  • como se dijo, cuando desea identificar a un usuario final (de manera confiable), no puede usar client_credentials
    Hans Z.
    11/07/2017 a las 10:55