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
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]).