IdentityServer4 aprendizaje (1)

1. Instancia de credenciales de cliente

① Preparación

Para instalar la plantilla, abra una ventana de consola y escriba el siguiente comando:

dotnet new -i IdentityServer4.Templates

Después de la instalación, habrá tan pocas plantillas de servidor de identidad

 

 

 Elegimos la plantilla de Tiendas en memoria y Usuarios de prueba para guardar la información en la memoria

② Crear un proyecto de plantilla de Almacenes en memoria y Usuarios de prueba

dotNET nuevo nombre is4inmem - myService

Se generarán varias categorías de clientes en el archivo de configuración, este caso intentará

 

 Luego configuramos el puerto de inicio del servicio en 5000

③ Crear un cliente

Escriba un cliente que solicite un token de acceso, cree una aplicación de consola y configure el puerto de inicio en 5002

Agregar paquete IdentityModel

Leer la dirección del punto final real de los metadatos

// descubre puntos finales de metadatos 
var client = new HttpClient ();
var disco = espera cliente. GetDiscoveryDocumentAsync ( " http: // localhost: 5000 " );
if (disco.IsError) 
{ 
    Console.WriteLine (disco.Error); 
    volver ; 
}

A continuación, puede usar la información en el documento de descubrimiento para solicitar un token de IdentityServer para accederapi1

// token de solicitud 
var tokenResponse = esperar cliente.RequestClientCredentialsTokenAsync ( nuevo ClientCredentialsTokenRequest 
{ 
    Address = disco.TokenEndpoint, 

    ClientId = " client " , 
    ClientSecret = " secret " , 
    Scope = " api1 " 
}); 

if (tokenResponse.IsError) 
{ 
    Console.WriteLine (tokenResponse.Error); 
    volver ; 
} 

Console.WriteLine (tokenResponse.Json);

Enviar token de acceso a la API, acceder a la API

// llamar a api 
var apiClient = new HttpClient (); 
apiClient.SetBearerToken (tokenResponse.AccessToken); 

respuesta var = aguarda apiClient.GetAsync ( " http: // localhost: 5001 / identity " );
if (! response.IsSuccessStatusCode) 
{ 
    Console.WriteLine (response.StatusCode); 
} 
else 
{ 
    var content = await response.Content.ReadAsStringAsync (); 
    Console.WriteLine (JArray.Parse (contenido)); 
}

④Definir recursos API

Cree un proyecto de API y configure el puerto de inicio en 5001

Agregar una nueva clase llamadaIdentityController

[Ruta ( " identidad " )] 
[Autorizar] 
clase pública  IdentityController: ControllerBase 
{ 
    [HttpGet] public IActionResult Get () 
    { return new JsonResult ( de c en User.Claims seleccione new {c.Type, c.Value}); 
    } 
}
    
          

Luego agregue permiso de acceso [Autorizar] en el controlador

El último paso es agregar el servicio de autenticación a DI (Inyección de dependencia) y agregar el middleware de autenticación a la tubería. Estos:

  • Verifique el token entrante para asegurarse de que proviene de un emisor confiable
  • Verifique que el token se pueda usar con esta API (también llamada audiencia)
 Inicio de clase pública 
{ public void ConfigureServices (servicios IServiceCollection) 
    { 
        services.AddControllers (); 
        services.AddAuthentication ( " Bearer " ) 
            .AddJwtBearer ( " Bearer " , options => 
            { 
                options.Authority = " http: // localhost: 5000 " ; 
                options.RequireHttpsMetadata = false ; 
                options.Audience = " api1 " ;
     


            }); 
    } 

    public  void Configure (aplicación IApplicationBuilder) 
    { 
        app.UseRouting (); 

        app.UseAuthentication (); 
        app.UseAuthorization (); 

        app.UseEndpoints (puntos finales => 
        { 
            endpoints.MapControllers (); 
        }); 
    } 
}
  • AddAuthenticationAgregue el servicio de autenticación a DI y configúrelo Bearercomo el esquema predeterminado.
  • UseAuthentication Agregue middleware de autenticación a la tubería para que cada llamada al host realice la autenticación automáticamente.
  • UseAuthorization Se agregó middleware de autorización para garantizar que los clientes anónimos no puedan acceder a nuestros puntos finales API.

http://localhost:5001/identityNavegar al controlador en el navegador debería devolver un código de estado 401. Esto significa que su API requiere credenciales y ahora está protegida por IdentityServer.

Referencias: https://identityserver4.readthedocs.io/en/latest/quickstarts/1_client_credentials.html

Supongo que te gusta

Origin www.cnblogs.com/liguix/p/12727458.html
Recomendado
Clasificación