Servidor de autorización compartido OAuth para múltiples aplicaciones

8

En mi tienda tenemos un par de API web .NET que usan tokens OAuth para la autenticación. Actualmente, cada API web es un servidor de autorización y de recursos. Los usuarios se autentican en todas estas API con la misma credencial, pero actualmente necesitan autenticarse en cada API de forma independiente.

Estoy interesado en crear un servidor de autorización compartido (a la http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ ), pero estoy colgado de la transformación de reclamos. Para nosotros es muy útil poder agregar notificaciones personalizadas (específicas de la aplicación) al token que se emite, de acuerdo con el siguiente ejemplo:

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{

    /* validate credentials here... */

    var identity = new ClaimsIdentity("JWT");

    identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
    identity.AddClaim(new Claim("sub", context.UserName));
    identity.AddClaim(new Claim(ClaimTypes.Role, "Manager"));
    identity.AddClaim(new Claim(ClaimTypes.Role, "Supervisor"));

    var props = new AuthenticationProperties(new Dictionary<string, string>
        {
            {
                 "audience", (context.ClientId == null) ? string.Empty : context.ClientId
            }
        });

    var ticket = new AuthenticationTicket(identity, props);
    context.Validated(ticket);
    return Task.FromResult<object>(null);
}

Por lo que puedo ver, si creo un servidor de autorización común, todas las transformaciones de reclamos deben ocurrir allí. ¿Significa esto que los servidores de recursos (nuestras diferentes API web) no pueden agregar ningún reclamo personalizado al token del usuario? ¿Puedo agregar reclamos específicos a la aplicación que solicita el token en el servidor de Autorización, o necesito armar algo para que el servidor de autorización agregue ciertos reclamos basados ​​en la aplicación solicitante?

Joshua Barron
fuente
Para los futuros espectadores de esta pregunta, nunca encontré una solución para el recurso consumidor para agregar reclamos personalizados. Terminé escribiendo un servidor de autorización que aceptaría una configuración común para cada servidor de recursos y generaría reclamos personalizados basados ​​en eso.
Joshua Barron
Parece que necesitaría tener sus reclamos administrados en una base de datos central y luego completarse cuando se emitió el token. OAuth en sí mismo es realmente solo autenticación / emisión de tokens. La autorización sigue siendo una pieza que debe conectar (reclamos, roles, etc.) y administrar por separado.
Kasey Speakman

Respuestas:

1

En el pasado, tuve un servidor de autenticación que emitía tokens. Luego, el cliente envió el token de autenticación a un servidor de autorización con una solicitud del formulario:

"El cliente con este application_id solicita acceso para el usuario definido en el token de autenticación adjunto para acceder al contenido X".

El servidor de autorización verificó para asegurarse de que el usuario estaba autorizado y emitió un nuevo token de autorización para el cliente. El cliente luego pasó este token al servicio que proporcionó el contenido X.

El servidor de autorización en este caso necesitaba una actualización de configuración para conocer el nuevo contenido Y.

Puede modificarlo para que los servidores de recursos soliciten al servidor de autorización que cree un token que contenga notificaciones personalizadas adjuntas.

Chad Clark
fuente