HotChocolate でGraphQLを追加した新しい ASP.Net Core 3 MVC サイトがあります。Auth0 で Cookie ベースの認証を使用して MVC 側にサインインするユーザーがいます。
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect("Auth0", options =>
{
...
});
しかし、GraphQL リクエストの場合は、JWT 認証が必要です。これには次を使用します。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(config =>
{
...
});
どちらも独立して正常に動作します。Cookie 認証により、コントローラーの使用が許可されます。JWT 認証は GQL の使用を許可します。/graphql
しかし、コントローラーのCookie認証とルートのJWTを取得する方法がわかりません。
ちょっとしたコンテキスト: HotChocolate はカスタム ミドルウェアを使用して、/graphql
ルートに着信するリクエストを処理します。Authorize
コントローラー上にないため、配置するコントローラーがないため、属性でスキームを指定することはできません。
類似の質問
- ASP.NET Core での Cookie とトークン認証の組み合わせ - ここでの答え (「フレームワークを使用する」) はあいまいで、かなり役に立ちません。
- さまざまな承認/認証スキームの構成- これは .Net Core 1.1 であり、3.1 ではありません。API はかなり変更されています。それを適応させようとしましたが、実行時エラーが発生し
DefaultSignInScheme
ました。
(他にもいくつかあり、主に REST と MVC の組み合わせに焦点を当てていましたが、これらは両方ともコントローラーに送られるため、シナリオは少し異なります。)