Idnentiy Server 는 클 라 이언 트 증빙 서 류 를 사용 하여 API 에 접근 하 는 인 스 턴 스 코드 를 사용 합 니 다.
6471 단어 IdnentiyServerAPI
클 라 이언 트 는 clientid 와 secrect 를 통 해 identitserver 의 Token Endpoint 를 방문 하여 accesstoken 을 가 져 옵 니 다.
이 어 클 라 이언 트 는 accesstoken 을 머리 인증 으로 웹 api 에 접근 합 니 다.(웹 api 에 idenity server 에 대한 인증 이 추가 되 었 습 니 다).
코드 구현:그 중에서"http://localhost:5000"는 idenity server 주소 이 고"http://localhost:5001"는 api 주소 입 니 다.
idenity server:idenity server 에 api 와 클 라 이언 트 를 추가 합 니 다.다음 과 같 습 니 다.api 1 자원,client 클 라 이언 트 를 정의 합 니 다.client 클 라 이언 트 는 clientCredentials(클 라 이언 트 증빙)모드 로 지정 하고 api 1 에 접근 할 수 있 도록 합 니 다.
public class Config
{
// scopes define the API resources in your system
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api1", "My API")
};
}
// clients want to access resources (aka scopes)
public static IEnumerable<Client> GetClients()
{
// client credentials client
return new List<Client>
{
new Client
{
ClientId = "client",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes = { "api1" }
}
};
}
}
startup 에서 idenity server 를 설정 하면 다음 과 같 습 니 다.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// configure identity server with in-memory stores, keys, clients and scopes
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients());
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseIdentityServer();
}
}
WebApi:api 에 idenity server 의 인증 을 추가 합 니 다.코드 는 다음 과 같 습 니 다.그 중에서 같은 api 이름 을 정 의 했 습 니 다."http://localhost:5000"는 idenity server 의 주소 입 니 다.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters();
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
});
}
public void Configure(IApplicationBuilder app)
{
app.UseAuthentication();
app.UseMvc();
}
}
인증 할 컨트롤 러 추가:
[Route("[controller]")]
[Authorize]
public class IdentityController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return new JsonResult(from c in User.Claims select new { c.Type, c.Value });
}
}
클 라 이언 트:여기 서 는 Identity Model 라 이브 러 리 를 사용 합 니 다.
실제 요청 은 다음 과 같 습 니 다.
1.엑 세 스 토 큰 가 져 오기:http://localhost:5000/connect/token?client_id=client&client_secret=secret&grant_type=client_credentials&scope=api1
2.api 1 요청
http://localhost:5001/identity
Headers
Authorization:accesstoken
public class Program
{
public static void Main(string[] args) => MainAsync().GetAwaiter().GetResult();
private static async Task MainAsync()
{
// identitserver
var disco = await DiscoveryClient.GetAsync("http://localhost:5000");
if (disco.IsError)
{
Console.WriteLine(disco.Error);
return;
}
// api1 accesstoken
var tokenClient = new TokenClient(disco.TokenEndpoint, "client", "secret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api1");
if (tokenResponse.IsError)
{
Console.WriteLine(tokenResponse.Error);
return;
}
Console.WriteLine(tokenResponse.Json);
Console.WriteLine("
");
// accesstoken http , api1
var client = new HttpClient();
client.SetBearerToken(tokenResponse.AccessToken);
var response = await client.GetAsync("http://localhost:5001/identity");
if (!response.IsSuccessStatusCode)
{
Console.WriteLine(response.StatusCode);
}
else
{
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(JArray.Parse(content));
}
}
}
ps:1.이 기본 accesstoken 은 jwt 형식 입 니 다.클 라 이언 트 가 api 를 방문 할 때 api 는 시작 할 때 idenity 에 방문 하여 비밀 키 를 가 져 오 면 됩 니 다.referencetoken 이 라면 클 라 이언 트 가 api 에 접근 할 때 api 가 권한 을 부여 해 야 하 는 것 은 idenity server 를 다시 요청 합 니 다.또한 api 는 비밀 키 를 설정 해 야 합 니 다.client 는 AccessTokenType 속성 을 Reference 로 설정 해 야 합 니 다.
2.AccessTokenLifetime(token 생존 시간)을 사용자 정의 할 수 있 습 니 다.기본 값 은 3600 초,즉 한 시간 입 니 다.
총결산
위 에서 말 한 것 은 편집장 이 소개 한 Idnentiy server-클 라 이언 트 증빙 서 류 를 이용 하여 API 를 방문 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[API POST] 내 손으로 만든 API 사용하기, 스파르타 코딩 클럽 1일차스파르타 코딩 클럽 실무형 AI 웹 개발자 양성 과정 개발 과정: 1일차 4개월 과정의 프로그램이 시작됐다. 살인적인 스케줄, 하루 12시간 의무 자습시간 등등 걱정스러운 부분도 많았지만 프로그램 전체 기간동안 사용...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.