バックエンド API と通信する SPA (angular.js) があります。私が実装したいのは、API (ログイン ユーザー) の ID トークンを発行し、SPA のロールを設定する OpenId Connect のハイブリッド フローです。
私はこのサンプルに基づいてこれを行っていました - https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev/Mvc/src/IdSvrHost
[Authorize] 属性をコントローラーに設定してアクセスしようとすると、すべてうまく機能します。ログイン画面にリダイレクトされ、サインインできます。ユーザーのログインとクレームへのアクセスに AspNet OpenId Connect ミドルウェアを使用しています。
問題は、許可されていないユーザーになった後 (つまり、初めてユーザーがアプリケーションに入って [ログイン] ボタンをクリックしたとき) に、リダイレクトのない単純なログイン画面が必要なことです。
私が頭を包むことができないのはこれです(上記のサンプル、LoginController.csから):
[HttpGet(Constants.RoutePaths.Login, Name = "Login")]
public async Task<IActionResult> Index(string id)
{
var vm = new LoginViewModel();
if (id != null)
{
var request = await _signInInteraction.GetRequestAsync(id);
if (request != null)
{
vm.Username = request.LoginHint;
vm.SignInId = id;
}
}
return View(vm);
}
ログイン画面は、この SignInId Cookie と ID (不正なリダイレクト中) を取得します。これは後で実際のログイン中に (SignInResult 用に) 使用されます。
1) ハイブリッド フローは、バックエンド API と共に使用される SPA を持つのに最適ですか? ここのクライアントと ID サーバーはどちらも私たちのものなので、信頼されています。
2) SignInId が必要ない場合、空白のログイン フォームを使用してハイブリッド フローを実装するには、どのようなアプローチが考えられますか?
3) SignInId が必要な場合、空白のログイン画面を表示し、このアプローチを使用するためのワークフローは何ですか? [Authorize] によるリダイレクトは、悲しいことに、現在私が目にする唯一のオプションです。
4) このアプローチ (OpenId Connect のハイブリッド フロー) はモバイル アプリでうまく機能しますか? (Cookie、ストレージなどを念頭に置いて)
5) 現在、Identity Server は別のプロジェクト内 (私の API の隣) にあります。API と Identity Server の両方が同じプロジェクト内 (自己ホスト型) にある場合、またはこれが何にも影響しない場合、何かが変わりますか? @カポック
書き込みプレビュー