web-dev-qa-db-ja.com

既存のasp.net MVCアプリケーションをIdentityServerと統合するにはどうすればよいですか?

既存の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サーバーを認証に使用する方法の例はありません。

12
Robbie Mills

あなたはあなたが述べた4つのアプリケーションを持っているでしょう。

  1. IDおよびアクセス制御用のIdentityServer4アプリケーション。これは、SSOサービスとSTS(セキュリティトークンサービス)-機関になります。今日の時点で、これをASP.NETコア1.1でビルドします。 SSOになるには、もちろんユーザーデータベースが必要です。 ASP.NET Identityの使用はうまく機能し、IdentityServerとうまく統合されます。

  2. あなたが言うあなたのWeb APIはASP.NET Core 1.1を実行しています。これは、OAuth用語では、APIリソースと呼ばれます。このAPIをAPIスコープ

  3. 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またはトークンを実際に共有することはできません。

  1. モバイルクライアント。これは、確実にImplicit Flowを使用することを除いて、MVC Webアプリのような別のクライアントになります。再度、クライアントを登録し、アプリをコーディングします。
5
travis.js

IdentityServer4 を使用して、認証アプリケーションを構築します。それぞれのアプリケーションをidentityServer4クライアントとして、APIを ApiResources として扱います。これにより、すべてのアプリケーションに固有のclientidcallback 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つのアプリで共有認証を実現します。

そして これは始めるのに最適な場所です

3
MJK