既存のasp.net MVCアプリケーションを別のIdentityServerアプリケーションと統合するにはどうすればよいですか?
認証にID 2.0を使用する既存のasp.net MVCサイトがあります。
クライアント(モバイル)アプリケーションと通信するAPIを提供するasp.net Core 1.1を実行する2番目のアプリケーションができました。
3つのアプリケーションすべてで認証を共有する必要があります。
私が読んだことから、SSOを追加する必要があります。IdentityServerは、このための優れたソリューションのようです。 IdentityServerを4番目のアプリケーションとして設定し、それを新しい.net APIアプリケーションとクライアントアプリケーションに接続する予定です。
しかし、既存のAsp.netアプリケーションで新しいIDサーバーを認証に使用する方法の例はありません。
あなたはあなたが述べた4つのアプリケーションを持っているでしょう。
IDおよびアクセス制御用のIdentityServer4アプリケーション。これは、SSOサービスとSTS(セキュリティトークンサービス)-機関になります。今日の時点で、これをASP.NETコア1.1でビルドします。 SSOになるには、もちろんユーザーデータベースが必要です。 ASP.NET Identityの使用はうまく機能し、IdentityServerとうまく統合されます。
あなたが言うあなたのWeb APIはASP.NET Core 1.1を実行しています。これは、OAuth用語では、APIリソースと呼ばれます。このAPIをAPIスコープ。
ASP.NET Identityの現在のユーザーデータベースを含む既存のMVC Webアプリケーション。これは、IdentityServer権限(上記#1)のClientになります。承認コードフロー(より安全)を使用するか、暗黙的またはハイブリッドフローを選択できます。 ASP.NET MVC WebアプリケーションをIdentityServerインスタンスのクライアントとして設定する方法の例は、公式ドキュメントに記載されています。 http://docs.identityserver.io/en/latest/quickstarts/3_interactive_login。 html#creating-an-mvc-client 。
基本的に、あなた
(a)クライアントをIdentityServerに登録してから、
(b)クライアントアプリケーションにスタートアップコードを追加して、認証にIdentityServerを使用するように指示します-このようなもの...
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
AuthenticationScheme = "oidc",
SignInScheme = "Cookies",
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ClientId = "mvc",
SaveTokens = true
});
その時点で、ログインに内部ユーザーデータベースと外部IdentityServerの両方を使用できます。つまり、MVC Webアプリに2つの異なる方法でログインできます。 IdentityServerアプリは、MVC Webアプリの「外部プロバイダー」と見なすことができます。
既存のユーザー名とパスワード(およびロールなど)を新しいIdentityServerインスタンス/データベースに移行しますか?アプリケーション全体でSSOおよび共有IDとアクセス制御を実現するには、この答えは「はい」である必要があります。
SSOは、ユーザーがIdentityServerアプリでログインした場合にのみ可能です。ただし、デスクトップマシンのブラウザーと電話のモバイルアプリを使用しているため、実際にSSOを実現することはできません。デバイス間でCookieまたはトークンを実際に共有することはできません。
IdentityServer4 を使用して、認証アプリケーションを構築します。それぞれのアプリケーションをidentityServer4クライアントとして、APIを ApiResources として扱います。これにより、すべてのアプリケーションに固有のclientid
、callback uri
などが含まれます。IdentityServerAuthenticationOptions
をAPIに、OpenIdConnectOptions
をmvcアプリケーションに追加する必要があります。
たとえば、WebAPIのstartup.csには次のようなものがあります。
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ApiName = "api1"
});
app.UseMvc();
}
とにかく、まず、IdentityServerのしくみを理解する必要があります。次に、ユーザーコンテキストにアクセスするIDサーバーアプリを構築する必要があります。 同じapi scope
を許可することで、3つのアプリで共有認証を実現します。
そして これは始めるのに最適な場所です