我遇到了ASP.NET Core中的身份驗證管道的一些問題。我的方案是我想向已經使用OpenID Connect和Azure AD進行身份驗證的用戶發出挑戰。有多種場景可供您使用,例如在AAD v2端點場景中請求其他範圍時。在ASP.NET核心中重新驗證經過身份驗證的用戶
這很像ASP.NET MVC中的魅力,但在ASP.NET Core MVC中,用戶正被重定向到Cookie身份驗證中間件中配置的Access Denied頁面。 (當用戶沒有登錄時,發出挑戰按預期工作。)
經過幾個小時搜索網絡並嘗試不同的參數爲我的中間件選項,我開始懷疑,或者我失蹤明顯的東西,或者這種行爲是通過設計,我需要以其他方式解決我的需求。任何人對此有任何想法?
編輯:我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,則可以使用另一種方案(如azureaadscheme)的Authorize特性。 –
不幸的是,這也沒有幫助。我可以設置所有我想要的方案併爲挑戰指定一個方案,但Cookie身份驗證仍然以某種方式涉及處理它。請注意,我沒有使用Authorize屬性。用戶已經通過身份驗證,並且我手動發起挑戰。 – VolatileCoder
你可以發佈startup.cs和操作方法嗎? –