IdentityServer4 と .Net Core Identity を使用して OAUth サーバーを作成しました。ほとんどの場合、問題なく動作します。起動コードは次のとおりです。
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.Authority = Configuration["Settings:OAuthAddress"];
options.ClientId = "razor_code";
options.ClientSecret = Configuration["Settings:ClientSecret"];
options.ResponseType = "id_token code";
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("myapi");
options.Scope.Add("offline_access");
options.Scope.Add("email");
options.Scope.Add("profile");
options.SaveTokens = true;
});
services.AddAuthorization();
...
}
クライアント サイトのページで [Authorize] 属性を使用すると、ユーザーは自動的に OAUth サーバーに送られ、ログインされます。私がやりたいのは、登録ボタンとログインボタンを使用してクライアントアプリにもログインできるようにすることです。次のようにログインページを作成して、ログインを見つけました。
[Authorize]
public class LoginModel : PageModel
{
public IActionResult OnGetAsync()
{
return LocalRedirect("/");
}
}
リンクがこのページを指している場合、[Authorize] 属性により、OAuth サーバーでのログインがトリガーされます。ログインをトリガーするより良い方法を知っている人はいますか? 私のソリューションは常にサイトのルート ページに戻ります。このアプリのルート ページは [Authorize] 属性を持たない唯一のページなので、これで十分です。将来、それは変わる可能性があります。
また、登録リンクも機能するようにします。これは、登録ページに直接移動する機能が少なくとも機能していることを示しています。Microsoft.AspNetCore.Authentication.OpeIdConnect を使用してこれを実現する方法を知っている人はいますか?
これは技術的には2つの質問であることは知っていますが、答えは関連していると思います.