Thinktecture IdentityServerv3のデモを作成しています。目的は、IDサーバーをAzureWebサイトの下の独自のWebサイトとして実行することです。
IDサーバーを使用してユーザーを認証する他の(複数の)AzureWebサイトがあります。
入門チュートリアルに基づく( https://github.com/thinktecture/Thinktecture.IdentityServer.v3/wiki/Getting-started を参照)私はこれを持っていますほとんど動作しています。
私が問題を抱えているのは証明書です。
デモでは、独自の証明書を作成したいのですが、何をする必要があるのかわかりません。どんなガイダンスも役に立ちます。
私がこれに関して持っている他の質問:
厳密に言えば、SSL用と署名用の2つの証明書が必要です。技術的には同じである可能性がありますが、必ずしもそうする必要はありません。また、要件も異なります。
SSLの場合-クライアントの信頼できるリストにある証明書が必要です。通常、これは商用CAまたは内部PKIからの証明書です。
署名証明書の場合-独自に生成できます-例: makecertを使用します。
IdSrvは、証明書の読み込みに非常に柔軟性があります。証明書は、任意のソースから取得できます。通常は、Windows証明書ストア(サーバーへの管理者レベルのアクセス権がある場合)、ファイルシステム、または組み込みリソースから取得できます。
サンプルホストは、AzureWebサイトで正常に機能する埋め込みリソースアプローチを使用しています。本番シナリオでは、通常、より柔軟性が必要です(ロールオーバーなど)。そのため、たとえば、ブロブストレージ。
特権が最も少ない回答を拡張すると、「適切な」方法はAzureトラストストアにインストールすることだと思いますが、私の場合は、idsrv3の例のように埋め込みリソースから提供しました。
これが私のために働いたいくつかの詳細です。自己署名証明書の作成:
"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\makecert.exe" -r -pe -n "CN=MyAppIdentity" -sky signature MyApp.cer -sv MyApp.pvk
"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\pvk2pfx.exe" -pvk MyApp.pvk -spc MyApp.cer -pfx MyApp.pfx -pi MyPassword -po MyPassword
Pvk2pfx.exeのドキュメントにも関わらず、-poが指定されていない場合、pfxはpvkと同じパスワードを保持せず、X509Certificate2()はパスワードの問題で失敗することがわかりました。
Idsrv3サンプル証明書は、idsrv3サンプルコードを使用して、Azureで正常に機能しました。
var Assembly = typeof(Certificate).Assembly;
using (var stream = Assembly.GetManifestResourceStream("MyCompany.Identity.Website.Config.idsrv3test.pfx"))
{
return new X509Certificate2(ReadStream(stream), "idsrv3test");
}
ただし、独自の証明書を作成した場合、上記のコードを使用したローカルテストでは正常に機能しましたが、Azureでは、機能させるためにいくつかのフラグを追加する必要がありました。これらを使用することの意味は必ずしもわかりませんが、機能するので、それが始まりです。
using (var stream = Assembly.GetManifestResourceStream("MyCompany.Identity.Website.Config.MyApp.pfx"))
{
return new X509Certificate2(ReadStream(stream),
"MyPassword",
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
}