【.Net】IdentityServer 4の構築メモ【備忘録】
はじめに
IdentityServer3で実装していた認証基盤をIdentityServer4にバージョンアップするときに気をつける変更点や、つまずいた点を備忘録としてまとめておきます。
Contents
IdentityServerとは
- IdentityServerは、仕様に準拠したOpenIDConnectおよびOAuth2.0エンドポイントを任意のASP.NETCoreアプリケーションに追加するミドルウェアです。
- IdentityServer を使用すると、複数のアプリケーションとアプリケーションの種類に対してシングル サインオン (SSO) を実装できます。
構築手順
- IdentityServer 4の構築手順に関してはこちらのQuickStartを参考にしています。
- ソースコード見たいよって方はGitHub上に公式のサンプルソースが公開されているのでそちらをご確認ください。
変更点
- IdentityServer3 と 4ではほとんど互換性があるため、基本的にクライアントやApi側は変更なしでupdate可能
- IdentityServer 3ではビューの表示に制限があった(katana コンポーネントに依存していた)が、IdentityServer4からは好きなUI技術を利用することが可能になった
- ユーザーストアの統合に利用されていたIdentityServerのIUserServiceがなくなり、IProfileServiceと、IResourceOwnerPasswordValidator の形で新しいユーザーストアの抽象化に置き換えられたため、これからはユーザー認証を自分で実装する必要がある
つまずいた点
[その1] IdentityServer3.AccessTokenValidationを利用した認証が通らない
- 既存のApiがIdentityServer3.AccessTokenValidationというライブラリを用いて認証通していたのですが、上記構築手順通り進めただけだと401エラーとなり正常にアクセスできませんでした。
- 原因としては、IdentityServer3.AccessTokenValidationなど、IdentityServer3の認証基盤で利用していたような認証ようのライブラリだと、新規で作成した認証と互換性がなくてエラーとなるようです。
- 解決策としては、Api側は修正不要で、IdentityServer側の
startup.cs
で以下の設定を追加すればOKです。
namespace IdentityServer
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
・・・
var builder = services.AddIdentityServer((options) =>
{
options.EmitStaticAudienceClaim = true; // !!!ここを追加!!!
})
・・・
}
}
}
[その2] SilentRenewが止まらずに動き続ける
- これは原因がいまいち明確でないのですが、なぜかSilentRenewが無限に発生し続けるという問題に直面しました
- 対応方法としてはクライアント側でoidcのUserManagerを初期化する際に monitorSessionをfalseに指定することで正常に動くようになりました。
var mgr = new Oidc.UserManager({
// これを追加する
monitorSession: false
})
- 参考にしたのはこちらです。