ASP.NET Core proyecto distribuido combate (oauth contraseña del modo de realización identidad server4) - Notas de Estudio

Tarea 12: modo de contraseña oauth para lograr server4 identidad

Después de que el modo de contraseña es más estricto que el modo cliente, necesitamos un tercero para introducir un nombre de usuario y contraseña para acceder a la API

Introducido en el espacio de nombres IdentityServerCenter prueba en el Config

using IdentityServer4.Test;

Y añadir una manera de conseguir usuarioDePrueba

public static List<TestUser> GetTestUsers()
{
    return new List<TestUser>
    {
        new TestUser
        {
            SubjectId = "1",
            Username = "mingsonzheng",
            Password = "123456"
        }
    };
}

ambiente formal, a continuación, leer de la base de datos

Copiar la lista de clientes para agregar un cliente, modificar y ClientId AllowedGrantTypes

new Client()
{
    ClientId = "pwdclient",
    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
    ClientSecrets = 
    {
        new Secret("secret".Sha256())
    },
    AllowedScopes = {"api"},
}

En AddTestUsers de inicio

services.AddIdentityServer()
        .AddDeveloperSigningCredential()
        .AddInMemoryApiResources(Config.GetResource())
        .AddInMemoryClients(Config.GetClients())
        .AddTestUsers(Config.GetTestUsers());

Inicio IdentityServerCenter y ClientCredentialApi

Get señal_acceso

En la configuración se puede modificar la configuración de RequireClientSecret, por lo que la interfaz no llama a paso de parámetros client_secret

new Client()
{
    ClientId = "pwdClient",
    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
    ClientSecrets = 
    {
        new Secret("secret".Sha256())
    },
    AllowedScopes = {"api"},
    RequireClientSecret = false,
}

Nuevo programa de consola

dotnet new console --name PwdClient

Añadir paquete Nuget: IdentityModel

Después de añadir la reducción

dotnet restore

ThirdPartyDemo más de una copia de la modificación del programa

using System;
using System.Net.Http;
using System.Threading.Tasks;
using IdentityModel.Client;
using Newtonsoft.Json.Linq;

namespace PwdClient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // discover endpoints from metadata
            var client = new HttpClient();
            var disco = client.GetDiscoveryDocumentAsync("http://localhost:5000").Result;
            if (disco.IsError)
            {
                Console.WriteLine(disco.Error);
                return;
            }

            // // request token
            // var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
            // {
            //     Address = disco.TokenEndpoint,

            //     ClientId = "client",
            //     ClientSecret = "secret",
            //     Scope = "api"
            // });

            // request token
            var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
            {
                Address = disco.TokenEndpoint,

                ClientId = "pwdClient",
                ClientSecret = "secret",
                Scope = "api",

                UserName = "mingsonzheng",
                Password = "123456",
            });

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

            Console.WriteLine(tokenResponse.Json);

            // call api
            var client2 = new HttpClient();
            client2.SetBearerToken(tokenResponse.AccessToken);

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

En primer lugar empezar IdentityServerCenter, ClientCredentialApi

PwdClient reinicio, salida:

{
  "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImZFd0d5VGQtY2FkaE9Oamp6ajc5THciLCJ0eXAiOiJhdCtqd3QifQ.eyJuYmYiOjE1ODY0NTA4ODQsImV4cCI6MTU4NjQ1NDQ4NCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAwIiwiYXVkIjoiYXBpIiwiY2xpZW50X2lkIjoicHdkQ2xpZW50Iiwic3ViIjoiMSIsImF1dGhfdGltZSI6MTU4NjQ1MDg4NCwiaWRwIjoibG9jYWwiLCJzY29wZSI6WyJhcGkiXSwiYW1yIjpbInB3ZCJdfQ.xAndZZqCfNGblZmyxLEmWYHFmy26g75kk7cOCkppmWWbmf3ISQVM66hTiGfgpC2xntorRDBPhDtVU0hmmmoEukycTIbeR1jdg8hYyKF2lcuFzTldOIs5ogtp84Gk0GcKkv0Ecurz5onAsZAMLjV_f2bMr8k2DPOA9062L5ULxqWuk00jK3S1f8FPACWGqO87MUIimt4YGxySggdzr2INwmqBOb8HZcA3gCoz9vxf0i_RNBvq_9D7YnfiGIAIevR_MAymDGoK-1KzENcmyS15yFnDClUjcVgFBAUUuNEiB4106w9Uft5Tao1EUxI0_oy7_HulDpSY0Cs4RCyL5mlU4Q",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "api"
}
[
  {
    "date": "2020-04-11T00:48:04.3089512+08:00",
    "temperatureC": 22,
    "temperatureF": 71,
    "summary": "Warm"
  },
  {
    "date": "2020-04-12T00:48:04.3089617+08:00",
    "temperatureC": 24,
    "temperatureF": 75,
    "summary": "Chilly"
  },
  {
    "date": "2020-04-13T00:48:04.308962+08:00",
    "temperatureC": 37,
    "temperatureF": 98,
    "summary": "Cool"
  },
  {
    "date": "2020-04-14T00:48:04.3089622+08:00",
    "temperatureC": -3,
    "temperatureF": 27,
    "summary": "Mild"
  },
  {
    "date": "2020-04-15T00:48:04.3089624+08:00",
    "temperatureC": 46,
    "temperatureF": 114,
    "summary": "Sweltering"
  }
]

enlace de curso

http://video.jessetalk.cn/course/explore

Licencia Creative Commons

Este trabajo es Creative Commons Reconocimiento - No comercial - Compartir bajo la misma licencia 4.0 Acuerdo Internacional para la licencia.

Bienvenido a imprimir, utilizar, publicar, pero asegúrese de mantener el artículo firmado por Zheng Ziming (que contiene enlaces: http://www.cnblogs.com/MingsonZheng/ ), no serán utilizados con fines comerciales, asegúrese de publicar el mismo trabajo basado en la modificación de licencia de papel .

Si tienes alguna pregunta, por favor, póngase en contacto conmigo ([email protected]).

Supongo que te gusta

Origin www.cnblogs.com/MingsonZheng/p/12670821.html
Recomendado
Clasificación