【问题标题】:Asp.net core API authenticate with AzureAD Token使用 Azure AD 令牌进行 Asp.net 核心 API 身份验证
【发布时间】:2020-08-23 15:55:45
【问题描述】:

我有一个 xamarin 移动应用程序,它使用 Azure 广告对其用户进行身份验证。

我想使用存储在应用程序上的令牌来访问 api 上的数据。我在一个旧的 api 上工作,但我创建了一个 asp.net 核心 api,我想使用相同的令牌,因为我慢慢地将数据访问从一个 api 迁移到另一个。

我在asp.net核心启动类中设置了访问权限,如下

            services.AddAuthentication(sharedoptions =>
        {
        sharedoptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        sharedoptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
               })
         .AddJwtBearer(options =>
            {
        options.Authority = "https://login.microsoftonline.com/{ad name}.onmicrosoft.com";
        options.Audience = "api://{app service guid}";

        options.TokenValidationParameters = new `enter code here`Microsoft.IdentityModel.Tokens.TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidAudiences = new List<String> { "{app service guid}" },
            ValidIssuers = new List<string> { "[https://login.microsoftonline.com/{Azure AD guid}/v2.0/token"}
        };
    });

我使用邮递员进行测试,并在 asp.net 核心 api 上获得未经授权的状态,但在旧 api 上获得 OK(授权)状态,所以我知道令牌正在工作。

我的设置是否正确或我缺少某些配置?

【问题讨论】:

  • 您应该为 asp.net core api 请求一个新的令牌,而不是使用以前的令牌。您不应该验证不适合您的访问令牌。可以参考我之前的回答:stackoverflow.com/questions/63410297/…

标签: authentication azure-active-directory token asp.net-core-webapi


【解决方案1】:

如果您使用 B2C,您可以像下面这样更改这段代码:

services.AddAuthentication(options =>
              {
                  options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
              })
                .AddJwtBearer("ADB2C", jwtOptions =>
                {
                    jwtOptions.Authority = $"{appConfiguration.AppSettings.Adb2cInstance}/{appConfiguration.AppSettings.Adb2cDomain}/{appConfiguration.AppSettings.Adb2cPolicy}/v2.0/";
                    jwtOptions.Audience = appConfiguration.AppSettings.Adb2cClientId;
                    jwtOptions.RequireHttpsMetadata = bool.Parse(configuration["AppSettings:RequireHttpsMetadata"]); //// NOTE:: This is set only for dev purposes. Remove for higher environments.
                    jwtOptions.Events = new JwtBearerEvents
                    {
                        OnAuthenticationFailed = arg =>
                        {
                            // invoked if authentication fails
                            return Task.FromResult(0);
                        }
                    };
                });
               
            services.AddAuthorization(options => 
            {
                options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().AddAuthenticationSchemes("ADB2C").Build();
            });

【讨论】:

  • @flowagss,如果以上回复回答了您的问题,您可以点击绿色勾号并接受它作为帮助其他社区人员的答案。
猜你喜欢
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2021-02-18
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多