0

我有一个 .NET Core 2.2 / Angular 10 应用程序,我想在其中实现 Azure AD 登录。该应用程序已经使用 JWT 进行了简单的用户/密码登录:

 services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer("Default",options=>
....
  options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = Configuration["SecurityKeyIssuer"],
                ValidAudience = Configuration["SecurityKeyAudience"],
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SecurityKey"]))
            };

现在我尝试添加这个:

 .AddJwtBearer("AzureAD",opt =>
        {
            opt.IncludeErrorDetails = true;
            opt.Authority = Configuration["ActiveDirectory:Authority"];
            opt.Audience = Configuration["ActiveDirectory:Audience"];
...
 
services
        .AddAuthorization(options =>
        {
            options.DefaultPolicy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .AddAuthenticationSchemes("Default", "AzureAD")
                .Build();
        });

我尝试了几种变体,例如以不同格式对权限等进行硬编码。我进入登录页面,可以使用默认用户/密码身份验证登录,但之后每个页面都只显示这个 500 错误:

在此处输入图像描述

即使在我注释掉所有新配置之后。当我删除 AzureAD 身份验证方案时,它再次正常工作。有什么建议么?

当然,我注册了应用程序并使用了 Azure AD 页面中的信息。

此外,在尝试此操作时:

services.AddAuthentication("MyAuthenticationScheme")
      .AddMicrosoftIdentityWebApp();

它说:

严重性代码描述项目文件行抑制状态错误 CS1061“AuthenticationBuilder”不包含“AddMicrosoftIdentityWebApp”的定义,并且找不到接受“AuthenticationBuilder”类型的第一个参数的可访问扩展方法“AddMicrosoftIdentityWebApp”(您是否缺少 using 指令或程序集参考?) JI.Infopool.WebApp C:\Projekte\JI.Infopool - master\JI.Infopool.WebApp\Startup.cs 56 活动

虽然我已经包含了 NuGet 包 Microsoft.Identity.Web

4

1 回答 1

0

1.首先请检查对微软的登录请求是否被防火墙锁定。

2.确保 appsettings.json值正确。

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "<azure ad domain>",
  "TenantId": "<azure ad tenant id>",
  "ClientId": "<backend app id>"
}

在 Startup.cs 中

检查以下代码ConfigureServices()

    public void ConfigureServices(IServiceCollection services)
    {
        //services.AddControllersWithViews();
///
//
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
        services.AddAuthorization();

        ...
    }

configure()方法中确保你有这些

        app.UseAuthentication();
        app.UseAuthorization();

参考:使用 openidconnect-with-azure-ad-angular 和核心 webapiconfiguration

于 2022-02-08T13:15:16.337 回答