반응형
(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에서 전달받은 값을 화면에 출력한다.
반응형
'개발이야기 > AspNet&C#' 카테고리의 다른 글
IdentityServer 학습 #5 - Scope 개념 (0) | 2024.03.07 |
---|---|
IdentityServer 학습 #4 - Scope (0) | 2024.03.07 |
IdentityServer 학습 #2 (0) | 2024.03.07 |
IdentityServer 학습 #1 - 기본셋팅 (0) | 2024.03.07 |
Blazor + Efcore로 웹사이트 만들기 (2) (0) | 2024.02.06 |