認証にIdentityServer4を使用するマイクロサービスのAPIゲートウェイとしてocelotを使用しています。ocelot設定ファイルに「AuthenticationOptions」を追加して、apiキーを設定しました。ではスタートアップ Iは、Identityサーバーを追加します。IDサーバーでは、ヘッダーの値を使用して、接続文字列を動的に構築します。トークンを取得するリクエストを送信すると、IDサービスでヘッダーにアクセスできます。しかし、トークンを使用して次のリクエストを送信すると、元のヘッダーが使用できません。IDサービスで表示できるのは「Host」ヘッダーのみです。
リクエストをアイデンティティサーバーにルーティングする間、元のヘッダーを保持する方法はありますか?
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