Lés*_*ter 1 c# azure-active-directory asp.net-core-mvc openid-connect
我正在将 ASP.NET Core MVC 3.0 应用程序集成到 Azure AD 以进行身份验证和授权,一切正常,但是当我尝试注销时,一旦login.microsoftonline.com我注销,它就会重定向到我的应用程序,然后出现以下错误:
No webpage was found for the web address:
https://localhost:5002/Account/SignOut?page=%2FAccount%2FSignedOut
Run Code Online (Sandbox Code Playgroud)
我用来调用注销过程的路径是/AzureAD/Account/SignOut.
内容appsettings.json:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "[OMITTED]",
"TenantId": "[OMITTED]",
"ClientId": "[OMITTED]",
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)
这些是我的Startup.cs课堂内容:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "[OMITTED]",
"TenantId": "[OMITTED]",
"ClientId": "[OMITTED]",
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*ney 13
在(至少)最新版本中,您应该
endpoints.MapRazorPages();在 Startup 的 Configure() 方法中添加。这会为您处理路线。
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();//ADD THIS LINE
});
Run Code Online (Sandbox Code Playgroud)
原来,这是一个已知问题的Microsoft.AspNetCore.Authentication.AzureAD.UI; 该包在 ASP.NET Core 中实现了 Azure AD 身份验证/授权流程,其中一部分是一个嵌入式AccountController(区域AzureAD),可让您轻松完成登录 - 注销过程。问题是,一旦注销过程完成,该SignOut操作就会硬编码重定向/Account/SignOut?page=%2FAccount%2FSignedOut,这就是问题所在。
我设法通过实现一个小的 AccountController(没有区域)并添加一个SignOut处理来自Microsoft.AspNetCore.Authentication.AzureAD.UI's的重定向的操作来解决它AccountController:
[AllowAnonymous]
public class AccountController : Controller
{
[HttpGet]
public IActionResult SignOut(string page)
{
return RedirectToAction("Index", "Home");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我花了半天时间来解决这个问题,意识到当我们迁移到 .NET Core 3.0 时它就被破坏了。
我们还迁移到 Microsoft Identity,因为 AzureADB2C UI 被标记为已过时。因此,在ConfigureServices中,我们添加了:
services.AddRazorPages()
.AddMicrosoftIdentityUI();
Run Code Online (Sandbox Code Playgroud)
...正如 Paul 所说,在配置中我们添加了:
endpoints.MapRazorPages();
Run Code Online (Sandbox Code Playgroud)
这为我们解决了问题。我们从模板中创建一个带有 Microsoft 身份验证的全新 MVC Web 应用程序中得到了提示,并比较了我们的配置服务/配置方法中的差异。