2017-12-12 22 views
0

.NET Core 2.0とAngular 5を使用しています。このテクノロジの作業に関する情報が必要です。 Angular for Front Endおよび.NET CoreをAngewular CLIとdotnet CLIを使用して単一のプロジェクトMVCでバックエンドに使用することは可能ですか?私は実験を行いましたが、結果は良好でした.NEtのコントローラとAngular in the Frontとの接続に問題があります。行政使用するためMVCプロジェクトでAngular 5と.NETを使用する方法

  • 一つSPA角度(クライアントアプリケーション):

    私はこのアーキテクチャを持っています。

  • ユーザーとクライアント(API、サーバーなど)の認証用のAuthServer MVC(.NET CoreとAngular)が1つあります。

私は認証に暗黙のフローを使用していますので、mi SPAにはサインイン用のボタンがあり、ボタンをクリックすると、SPAはAuthServerにリクエストを送信し、auth.myapp.comにリダイレクトします。この場所では、ユーザーがあなたの資格情報(ユーザー名とパスワード)を入力し、authserverがロジックを実現し、トークンを生成してaccess_tokenでSPAにリダイレクトします。それはOpenIDの暗黙の流れです。

まず、「ログイン」と呼ばれる.NETのHttpGETコントローラがあります。このコントローラは "returnURL"という文字列を受け取り、このRazorをRazorビューで使用するためにViewModelに返す必要がありますが、Razorは使用せず、Angularを使用します。それが私の最初の問題です。 miクライアントSPA(admin.myapp.com)では、「サインイン」ボタンがあります。このボタンをクリックすると、認証サーバーへのリクエストが実現されました。このエンドポイントはreturlURLを抽出し、「Angular」の「Login」ページに戻ります。カミソリで

return View(vm); 

これにreturnurlはauth.myapp.comにadmin.myappp.comので、URLのPARAMために受信される(ローカルホスト:5000):

enter image description here

Angularでの使用方法このViewModel(returnURLの情報を返す)を返し、ログイン要求(HttpPost)で使用する必要があります。 私は、LoginのGETエンドポイントを削除して、Angular Routerを使ってreturnURLのこの "キャプチャ"を実行する方が良いかもしれないと考えていました。そして、この文字列があれば、エンドポイントPOSTを使用してログインして認証を実行し、.NETドライバを使用してアクセストークンを使用して自分のSPAにリダイレクトします。どちらが最善の選択肢でしょうか?私の推論のこの最後の部分は、次の問題につながります:

第2に、私はMVCアプリケーション、ドメインauth.myapp.com、このHttpPOSTコントローラのログインを実現するコントローラを持っていますログインの情報(前のViewModelからのユーザー名、パスワード、returnURl)を持つモデルを受信すると、このモデルは.NETコントローラと接続するサービスAngularから受信され、結果が正の場合は他のSPAにリダイレクトされます他の外部ホストでは、たとえば:admin.myapp.com、SPAで使用するaccess_tokenを指定します。 私はこのコードを使用:

[HttpPost] 
public async Task<IActionResult> Login (LoginInputModel model) { 
    if (ModelState.IsValid) { 
     if (_usersStore.ValidateCredentials (model.Username, model.Password)) { 
      var user = _usersStore.FindByUsername (model.Username); 

      if (_interactionService.IsValidReturnUrl (model.ReturnUrl) || Url.IsLocalUrl (model.ReturnUrl)) { 
       return Redirect(model.ReturnUrl); 
      } 
      return Redirect("~/"); 
     } 
    } 
    return Redirect("~/"); 
} 

問題があることである「(リダイレクトを返す)は、」。NETコントローラので、フロントエンドで角度ウィットをリダイレクトする方法を、角度、及びカミソリとそうでは見られませんか?

これは、IdentityServer4で実装されたOpenID認証の暗黙のフローです。

+0

わからない場合。シードは、ログインに成功した後にアプリケーションにリダイレクトされるjsスクリプトを実行するビューを利用します。また、リダイレクトアクションを実行するコントローラ内のロジックを実装することもできますが、これはファウンダが推奨する方法ではありません。 – Aeseir

+0

こんにちは、答えに感謝します。私はIdentityServer4のクイックスタートとサンプルを調べていました。問題は、Razorを使ってintarfazを表示することです。MVCコントローラからリダイレクトするのは簡単です。私の質問は、これをAngular SPAにどのように適用するかです。ここでは、RazorをAngularに置き換えることで、リダイレクトをAngularで直接行う必要があると思いますか? –

+0

私は理解していると思います。リダイレクトなしでログイン/登録したいのですが、IS MVCコンポーネントに間違いありませんか?私は実際にそれを見て、ここで私はhttps://stackoverflow.com/questions/46880662/identityserver-4-restfull-login-logoutを得た答えです。要約は、それが推奨アプローチではないことです、あなたはクライアントとAPIからIS4を分離する必要があります。より安全な場所でのセキュリティ制御 – Aeseir

答えて

1

要約は、推奨されていないアプローチであるため、お客様のIS4をクライアント& Apiから分離する必要があります。より多くのセキュリティ制御が適所にある。

私は以前ここで同じクエリに見てきた:あなたはチャンスがあったが、暗黙のフローのIdentityServer4.Samplesのquckstartを見てIdentityServer 4 Restfull Login/Logout

関連する問題