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


如果我创建一个新应用并在 StartUpappSetting 中添加相同的代码,它可以正常工作,但在我的项目中却不行。

这里有什么问题??

【问题讨论】:

项目中是否安装了这个包? Microsoft.Identity.Web 看起来它正在尝试查找重定向 URI,但那里没有页面,此页面通常为 provided by the above package。 是的,我已经安装了这个包。但还是不行 【参考方案1】:

正如@DCCoder所建议的那样

在项目根目录的Nuget package 安装程序中将以下Nuget package 安装到项目Microsoft.Identity.WebMicrosoft.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 身份验证和身份?

ASP.NET Core Azure AD OpenID - 生产服务器上的令牌签名验证失败

带有 JWT Bearer 令牌和 ASP.NET Core 2 WebApi 的 Azure AD 用户信息