4

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

私は、既存のasp.net MVCサイトでID 2.0を使用して認証しています。

これで、クライアント(モバイル)アプリケーションと通信するAPIを提供するasp.net Core 1.1を実行する2番目のアプリケーションが作成されました。

3つのアプリケーションすべてで認証を共有する必要があります。

私が読んだことから、私はSSOを追加する必要があり、IdentityServerはこれに最適なソリューションだと思われます。 IdentityServerを4番目のアプリケーションとしてセットアップし、新しい.net APIアプリケーションとクライアントアプリケーションに接続する予定です。

しかし、既存のAsp.netアプリケーションで認証に新しいIDサーバーを使用する方法の例は見つかりません。

+0

asp.net MVCアプリケーションの認証にID 2.0を使用するとします。 Googleのような外部のアイデンティティプロバイダですか? Identity Server 4に切り替えた後もそのまま使用しますか? – Ignas

+0

いいえ、すべての認証は内部で、外部プロバイダはありません。私は交換後にそれを使い続ける必要はない –

答えて

1

あなたが記載されている4つのアプリケーションを持っています。

  1. アイデンティティとアクセス制御のためのIdentityServer4アプリケーション。これは、SSOサービスとSTS(セキュリティトークンサービス) - 権限です。今日の時点で、ASP.NETコア1.1でこれを構築します。もちろんSSOになるには、ユーザーデータベースが必要です。 ASP.NET IDを使用するとうまく動作し、IdentityServerとうまく統合されます。

  2. あなたのWeb APIはASP.NET Core 1.1を実行しています。これは、OAuthの用語では、APIリソースと呼ばれています。このAPIを、APIスコープと呼ばれる個別に安全なセクションに細分することができます。

  3. ASP.NET IDで現在のユーザーデータベースを使用している既存のMVC Webアプリケーション。これは、のクライアントのIdentityServer権限(上記の#1)になります。認証コードフロー(より安全)を使用するか、暗黙またはハイブリッドフローを選択することができます。 ASP.NET MVC WebアプリケーションをIdentityServerインスタンスのクライアントとして設定する方法の例は、公式ドキュメントのhttp://docs.identityserver.io/en/latest/quickstarts/3_interactive_login.html#creating-an-mvc-clientにあります。

基本的に、あなた

(a)は、その後、IdentityServerとクライアントを登録

(b)はauthentication-何かのため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と共有アイデンティティとアプリケーション間のアクセス制御を実現するには、この回答が「はい」になる必要があります。

SSOは、ユーザーがIdentityServerアプリケーションでログインする場合にのみ可能です。しかし、実際にSSOを達成することはないでしょう。デスクトップマシンのブラウザと携帯電話のモバイルアプリで、デバイス間でクッキーやトークンを本当に共有できないからです。

  1. モバイルクライアント。これは、暗黙のフローを確実に使用する以外は、MVC Webアプリケーションのような別のクライアントになります。再度、クライアントを登録し、アプリケーションをコーディングします。
2

IdentityServer4を使用して認証アプリケーションを構築します。それぞれのアプリケーションをidentityServer4クライアントとAPIとして扱います(ApiResources)。したがって、すべてがユニークなclientid,callback uriなどです。APIにはIdentityServerAuthenticationOptionsを追加し、mvcアプリケーションにはOpenIdConnectOptionsを追加する必要があります。

例えば、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方法を理解する必要があります。そして、あなたはあなたのユーザーコンテキストにアクセスするアイデンティティサーバーアプリケーションを構築する必要があります。 同じapi scopeを許可することで、3つのアプリケーション間で共有認証を実現します。

そしてthis is the best place to start

関連する問題