개발이야기/AspNet&C#

IdentityServer 학습 #3

Roslyn 2024. 3. 7. 11:19
반응형

(1) 콘솔 응용프로그램을 추가해 줍니다.

dotnet new console -n {프로젝트명}

 

(2) 해당 프로젝트를 솔루션에 추가해 줍니다.

dotnet sln add ./{프로젝트폴더}

 

(3) 해당 프로젝트에 IdentityModel을 Nuget으로 설치해 줍니다.

dotnet add ./{프로젝트폴더} package IdentityModel

 

(4) 개발용 인증서를 신뢰하기 위해 다음 명령을 수행합니다.

dotnet dev-certs https --trust

 

(5) 콘솔 응용프로그램의 Program.cs의 내용을 다음 내용으로 변경합니다.

using IdentityModel.Client;
using System.Text.Json;

// discover endpoints from metadata
var client = new HttpClient();
var disco = await client.GetDiscoveryDocumentAsync("https://localhost:5001");
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 = "api1"
});

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

Console.WriteLine(tokenResponse.AccessToken);

// call api
var apiClient = new HttpClient();
apiClient.SetBearerToken(tokenResponse.AccessToken!); // AccessToken is always non-null when IsError is false

var response = await apiClient.GetAsync("https://localhost:6001/identity");
if (!response.IsSuccessStatusCode)
{
	Console.WriteLine(response.StatusCode);
}
else
{
	var doc = JsonDocument.Parse(await response.Content.ReadAsStringAsync()).RootElement;
	Console.WriteLine(JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true }));
}
Console.ReadLine();

 

(6) 이제 인증서버(5001)과 API서버(6001)을 실행시키고, 콘솔 응용프로그램을 실행하면 다음과 같이 인증 토큰과 API에서 전달받은 값을 화면에 출력한다.

 

 

반응형