Cómo puedo definir políticas para mi API para los dos tipos de tokens de acceso, una de ellas con una identidad (sub) y uno que no?

Estoy usando IdentityServer4 a través de ASPNET Núcleo, y quiero a los usuarios acceder a mi API, tanto por el navegador web a través de su identidad (Implícito e Híbridos), y por los clientes a través de programación (las Credenciales del Cliente). Me doy cuenta de todo lo que tengo que hacer es agregar AddIdentityServerAuthentication y estoy hecho. Sin embargo, que sólo resuelve la autenticación de los aspectos de este problema, no de la autorización.

Autorización:

Con ASPNET Núcleo, sólo puede utilizar la Función de base de auth (o PolicyServer permisos que es similar), pero sólo si usted tiene una identidad con papel de reclamaciones, que no trabajo para las credenciales del cliente. Lo que nos lleva a la necesidad de asegurar papel, o las políticas Y ámbitos. ¿Cómo puedo hacer esto?

  • No puedes tener múltiples políticas, si no, ambos deben pasar.
  • Usted no puede tener varias auth esquemas, porque mi llamada a AddIdentityServerAuthentication se tiene que utilizar la misma autoridad, entonces, ¿cómo IdentityServer4.AccessTokenValidation/JwtBearer saber que usted esquema reto que está tratando de pasar?
  • Múltiples requerimientos que podría funcionar, pero usted necesita para añadir requisitos de la condición de que usted está tratando con una no-identidad token de acceso. Cómo se puede detectar qué tipo de ficha que se enfrentar? Es seguro decir "Si no hay sub, es cliente de creds."
  • Debo de chatarra de este diseño y de la fuerza de código de dispositivo de flujo de mis usuarios? Mira az cli por arte de magia se abre un navegador y, a continuación, puede iniciar secuencias de comandos de inmediato a su contenido de los corazones. IS4 apoya esto con facilidad, especialmente con verficationUrlComplete

Creo que tengo un trabajo POC, pero yo estoy lejos de ser feliz con ella. https://gist.github.com/VictorioBerra/8c333a228c55d86a7c15f7f300284634

Esto implica, básicamente, la re-implementación del ámbito predeterminado de reclamación requisito controlador y policyservers requisito de permiso controlador. Pero esa es la única manera de aplicar condicionalmente el requisito de controladores basados en el tipo de token.

1 Respuestas

  • Vidmantas Blazevicius
    4 de mayo de 2019

    Hay al menos un par de maneras de cómo ir alrededor de su problema de la implementación de la función de autenticación basada en:

    • Usted podría haber malinterpretado el hecho de que un cliente puede tener role reclamaciones en el client_credentials flujo.
    • Usted podría incluso tener sub reclamación si usted implementado client_credentials_custom flujo y, esencialmente, se unen a un cliente a una cuenta de usuario en particular (piense en esto como una cuenta de servicio)