3

こんにちは、私のASP.NET CoreアプリケーションでASP.NETコアOpenIdConnectServerデータ保護キーの場所

私はAPI認証のためのOpenIdConnectServerを使用しています。すべてうまく動作します。

解決できない問題が1つあります。トークン署名鍵を永続化するためのカスタムフォルダを設定する方法はありますか?サービス構成で

は私が持っている:

services.AddDataProtection() 
     .PersistKeysToFileSystem(new DirectoryInfo(@"keys/")); 

最初に実行した後、アプリケーションキーがそこに作成されます。 しかし、OpenIdServerは何らかの形で鍵を管理しています。それにもかかわらず

app.UseOpenIdConnectServer(options => { 
    ... 
    options.DataProtectionProvider = app.ApplicationServices.GetDataProtectionProvider(); 
    ... 
}); 

、キーに署名する資格情報は、デフォルトの場所に作成されます。

A new RSA key ... persisted on the disk: /home/.../.aspnet/aspnet-contrib/oidc-server/<some guid>.key. 

は、そのバグや機能ですか?どのようにしてサーバに鍵をkeys/フォルダにも格納させるにはどうすればいいですか?


抽象 - 私がやっている理由は、この

私の考えでは、こののNドッキングウィンドウ画像からAPIを構築し、負荷ballancerの後ろにそれを隠すとクラウドのどこかに実行することです。問題は、 - ドッカーのすべてのインスタンスが自身のアプリケーション&署名鍵を作成するとき、暗号化された認証トークンは、トークンを作成し署名した他のインスタンス以外のインスタンスでは機能しません。 したがって、実行中のすべてのドッカーイメージに同じキーを配布しようとしています。可能であれば、あらかじめ定義されたアプリケーションフォルダへ。

さらに良い方法やベストプラクティスがありますか?


ありがとうございます。

+0

FYI、OIDCサーバミドルウェアはDataProtectionキーが管理されている方法を変更しませんが、それは2つの別々のシリアル化のメカニズムが実際に存在しているとして、HTTPで説明したように、それは、使用するキーだけではありません:// stackoverflowの.com/questions/38541772/authorize-via-jwt-token/38542062表示されているデバッグメッセージは、ID_token署名用の非対称キーを作成する内部RSAキー生成機能によって記録されます。この機能は主に開発目的に使用され、次のベータ版(beta7)で削除される予定です。 – Pinpoint

答えて

4

まあ、私はそれを理解しました。

まず、我々はhere

openssl genrsa -out private.key 1024 
openssl req -new -x509 -key private.key -out publickey.cer -days 365 
openssl pkcs12 -export -out certificate.pfx -inkey private.key -in publickey.cer 

を説明した(秘密鍵付き)x509証明書を生成する必要があり、あなたが好きなフォルダにこのケースでkey/certificate.pfxそれをコピーします。

その後、そっとOpenIdConnectServerに新しい証明書を挿入します。

appsettings.json

"Keys": { 
    "CertificatePath": "keys/certificate.pfx", 
    "CertificatePassword": "<password you provider>" 
} 

Startup.cs

private X509Certificate2 CreateOauthCertificate(){ 
     var path = Configuration["Keys:CertificatePath"]; 
     var password = Configuration["Keys:CertificatePassword"]; 
     return new X509Certificate2(path, password); 
    } 

Starup。CS - より良い方法かどうかがある場合は今、私は好奇心が強い

app.UseOpenIdConnectServer(
    ... 
    options.SigningCredentials.AddCertificate(CreateOauthCertificate()); 
    ... 
}); 

を設定します。

しかし、これは動作します。

よろしく

+0

私はある点を疑問に思っています。 'appsettings.json'の代わりに' CertificatePath'と 'CertificatePassword'を環境変数に保存する(あるいは秘密管理ツールを使って保存する)と、期待どおりに動作しませんか? –

+0

これはまさに正しいことです(RSA鍵生成機能が削除されるため、beta7でも必須となります)。 – Pinpoint

+0

@ademcaglinこれもうまくいくはずです。私はここで明確なデモンストレーションのためにjsonのアプローチを選んだ。 – rudolfdobias

関連する問題