APIキーを使用して、サービスから別のサービスへの呼び出しを認証しようとしています。管理サービスは、初めて起動されたときに「サービスアカウントユーザー」を作成します。サービスが別のサービスを呼び出す今とき、私は持っている:APIキーで許可されていません
Client = new JsonServiceClient("http://TheOtherServer:1234")
{
Credentials = new NetworkCredential(<the string with my api key>, ""),
};
//.....
var request = new RequestDtoOfOtherServer
{
//set some request props
};
try
{
var result = Client.Get(request);
//do something with result
}
catch (Exception ex)
{
Log.Error($"Error: {ex}");
throw;
}
、私はいつも401不正エラーが出るものは何でも、私は電話サービスの利用者に対して発行された2つのキーから使うキー
。私は受信サービスでRequestLogsFeature
をオンにしましたが、エントリはありません。
私が呼び出すメソッドには[RequiresAnyRole("User", "Administrator", "bizbusops-service", "SYSTEM")]
と注釈が付けられ、使用するAPIキーに関連するユーザーはロールbizbusops-service
にあります。また、WPF UIを使用して、そのユーザー(ユーザー名/パスワードを使用して)でログインすると、エラーなしでこのメソッドにアクセスできます。したがって、サーバー間接続やAPIキーの確立には何か問題があります。
私には何が欠けていますか?
- 上記のNetworkCredentialコードは、2つのサーバー間でセッションを確立してCookieを発行しますか?
- Redis DBには、サービスのユーザーアカウントに対して2つのキーが発行されています。両方を使用することはできますか?環境とKeyTypeをサーバー側のどこかに設定する必要がありますか? RequestFilterで?
UDATE が、私はそうのようなAuthFeature
プラグインを設定している認証コール受信するサーバー上:
Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[] {
new BizBusAuthProvider(),
new ApiKeyAuthProvider(AppSettings)
{
KeyTypes = new []{"secret", "publishable"},
},
}
));
すべての新しいユーザーのための4つのAPIキーを生成し、この構成を、ものが定義されましたデフォルトで作成された2つです。
あなたAuthFeature構成がどのように見えるんでしょうか? – mythz
ApiKeyAuthProviderを移動して最初のAuthProviderにするか、[資格情報の代わりにBearerTokenを使用する](http://docs.servicestack.net/api-key-authprovider#interoperable)に変更してみてください。 – mythz
資格情報で働いた最初の場所でそれを動かしてください!何故ですか?デフォルトでは 'RequireSecureConnection = true'と思われるので、最初は禁止されたエラーが出ました。これは環境に依存するのか、それとも一般的に有効ですか?それはSSLの権利を意味しますか? (私は開発環境では持っていません)。 – ThommyB