ASP.NET Coreの認証パイプラインに関するいくつかの問題が発生しています。私のシナリオでは、OpenID ConnectとAzure ADを使ってすでに認証されているユーザーに挑戦したいと思っています。たとえば、AAD v2エンドポイントのシナリオで追加のスコープを要求する場合など、複数のシナリオが必要な場合があります。ASP.NETコアで認証されたユーザーに再度挑戦する
これはASP.NET MVCの魅力のように機能しますが、ASP.NET Core MVCでは、Cookie認証ミドルウェアで設定されたアクセス拒否ページにリダイレクトされています。 (ユーザーがログインしていない場合、チャレンジを発行すると期待どおりに動作します)
ウェブを検索してミドルウェアオプションのさまざまなパラメータを試した後、私は紛失している何かが明白であるか、またはこの動作が仕様であり、私は別の方法で私の要求を解決する必要があります。誰でもこれに関するアイデアは?
EDIT:私のStartup.csの関連部分は次のようになります。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(
SharedOptions => SharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// <snip...>
app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme });
var options = new OpenIdConnectOptions
{
AuthenticationScheme = OpenIdConnectDefaults.AuthenticationScheme,
ClientId = ClientId,
Authority = Authority,
CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"],
ResponseType = OpenIdConnectResponseType.CodeIdToken,
PostLogoutRedirectUri = "https://localhost:44374/",
TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = false
}
};
options.Scope.Add("email");
options.Scope.Add("offline_access");
app.UseOpenIdConnectAuthentication(options);
}
と行動は次のようになります。
public void RefreshSession()
{
HttpContext.Authentication.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties { RedirectUri = "/" });
}
AuthenticationSchemesの使用を検討しましたか?何らかのアクションに対してcookieauthenticationを無視する場合は、Authorize属性をazureaadschemeなどの別のスキームとともに使用できます。 –
残念ながらそれはどちらも役に立たない。私が望むすべてのスキームを設定し、その挑戦のために1つを指定することができますが、クッキー認証はまだそれをどう扱うかに関係しています。そして、私はAuthorize属性を使用していないことに注意してください。ユーザーは既に認証されており、手動でチャレンジを発行します。 – VolatileCoder
startup.csとアクションメソッドを投稿できますか? –