Azure AD 与 ASP.NET Core MVC 中的标识
Posted
技术标签:
【中文标题】Azure AD 与 ASP.NET Core MVC 中的标识【英文标题】:Azure AD with Identity in ASP.NET Core MVC 【发布时间】:2022-01-06 05:53:56 【问题描述】:我有一个应用程序,我曾经在其中使用 AD 和 Identity 对用户进行身份验证。但现在我想从 AD 更改为 Azure AD。
我在 Azure 门户中注册了一个应用并将其添加到我的 appSettings.json
文件中
"AzureAD":
"Instance": "https://login.microsoftonline.com/",
"Domain": "contoso.onmicrosoft.com",
"ClientId": "XXXX",
"TenantId": "XXXX",
"CallbackPath": "/signin-oidc",
"SignoutCallbackUrl": "/signout-oidc"
我还在我的 StartUp
类中添加了此代码
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
services.AddControllersWithViews(options =>
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
);
services.AddRazorPages()
.AddMicrosoftIdentityUI();
现在,当我运行该应用程序时,它仍然需要我之前的登录页面,而不是 Microsoft 登录页面。因此,我删除了视图中的 AccountConttroller
以及帐户文件夹。
但它仍然不起作用。还有这样的节目。
This localhost page can’t be found
No webpage was found for the web address: https://localhost:44353/Account/Login?ReturnUrl=%2F
HTTP ERROR 404
如果我创建一个新应用并在 StartUp
和 appSetting
中添加相同的代码,它可以正常工作,但在我的项目中却不行。
这里有什么问题??
【问题讨论】:
项目中是否安装了这个包? Microsoft.Identity.Web 看起来它正在尝试查找重定向 URI,但那里没有页面,此页面通常为 provided by the above package。 是的,我已经安装了这个包。但还是不行 【参考方案1】:正如@DCCoder所建议的那样
在项目根目录的Nuget package
安装程序中将以下Nuget package
安装到项目Microsoft.Identity.Web
和Microsoft.AspNetCore.authentication.AzureAD
:
在startup.cs
文件中,在配置服务下更新如下
public void ConfigureServices(IServiceCollection services)
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme).AddMicrosoftIdentityWebApp(Configuration.GetSection(****"AzureAd"****));
services.AddControllersWithViews();
并更新身份验证如下:
app.UseAuthentication()
; app.UseAuthorization();
并在 appsetting.json
文件中更新了以下详细信息,这些详细信息来自上述应用注册概述。
"AzureAd":
"Instance": "https://login.microsoftonline.com/",
"Domain": "demotest.onmicrosoft.com",
"ClientId": "*****",
"TenantId": " ****** " ,
"CallbackPath": "/signin-oidc"
,
从homecontroler.cs
文件添加了一个名为[Authorize]
并运行将重定向到 MSA 登录页面的应用程序,如下所示:
更多信息请参考SO THREAD & Blog
更新:另外请尝试在您的startup.cs
中添加以下代码
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
【讨论】:
抱歉回复晚了。不,我实际上做了所有这些,但它仍然对我不起作用。我什至创建了新项目并添加了所有需要的代码并且它工作但是当我将我的其他控制器和视图添加到新项目时它说 localhost url 不可用 能否请您参考答案中分享的博客。 我确实提到了它。我也做了同样的事情,但由于我使用的是 dotnet Core,所以不得不进行一些更改,但我仍然收到此错误This localhost page can’t be found No webpage was found for the web address: https://localhost:44353/Account/Login?ReturnUrl=%2F HTTP ERROR 404
您能否尝试将此代码添加到startup.cs
class pp.UseEndpoints(endpoints => endpoints.MapControllers(); );
另请参考***.com/questions/43468715/… & ***.com/questions/59949443/…以上是关于Azure AD 与 ASP.NET Core MVC 中的标识的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 2.2 中的 Azure AD 身份验证
ASP.NET Core 3.1 Azure AD 身份验证引发 OptionsValidationException
使用 Azure AD 的 Asp.net core mvc 基于角色的授权
如何在 ASP.NET Core 3 上同时使用 Azure AD 身份验证和身份?