인증을 위해 IdentityServer4가있는 마이크로 서비스의 API 게이트웨이로 ocelot을 사용하고 있습니다. ocelot 설정 파일에서 "AuthenticationOptions"를 추가하고 API 키를 설정했습니다. 에서 시작 I는 Identity 서버를 추가 할 수 있습니다. Identity Server에서는 헤더의 값을 사용하여 연결 문자열을 동적으로 작성합니다. 토큰을 얻기 위해 요청을 보내면 자격 증명 서비스에서 헤더에 액세스 할 수 있습니다. 그러나 토큰으로 다음 요청을 보내면 원래 헤더를 사용할 수 없습니다. ID 서비스에는 "호스트"헤더 만 표시 될 수 있습니다.
요청을 Identity Server로 라우팅하는 동안 원래 헤더를 유지하는 방법이 있습니까?
Startup.cs (ID 서버 추가)
services
.AddAuthentication()
.AddIdentityServerAuthentication("APIParts", options =>
{
options.Authority = "http://localhost:60168";
options.RequireHttpsMetadata = false;
options.ApiName = "Parts";
options.SupportedTokens = SupportedTokens.Both;
});
ocelot.json
ReRoutes": [
{
"DownstreamPathTemplate": "/connect/token",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 60168
}
],
"UpstreamPathTemplate": "/token",
"UpstreamHttpMethod": [ "Post" ]
},
{
"DownstreamPathTemplate": "/api/Parts/Inventory",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 65241
}
],
"UpstreamPathTemplate": "/api/Parts/Inventory",
"AuthenticationOptions": {
"AuthenticationProviderKey": "APIParts",
"AllowedScopes": []
}
}]
1
깊이 들어가기 전에 Identity Server 인증 및 API에 다른 포트를 사용하는 이유를 설명 할 수 있습니다. API 요청이 생성 될 때 ID 권한 부여가 API가있는 동일한 포트에서 토큰의 유효성을 검사하려고 할 때 문제가있을 수 있으므로 동일한 포트를 제공하고 시도 할 수 있습니까?
—
Nauman Khan
연결 문자열을 작성하기 위해 헤더에 액세스하는 방법을 보여주는 코드를 게시 할 수 있습니까? 또한 어떤 헤더를 읽으려고합니까? 그것이 호스트 헤더라면 문제가 생길 것입니다.
—
Nix