asp.net - 使用 .NET Core 2 的 Azure AD B2C Web API

标签 asp.net azure asp.net-web-api asp.net-core azure-ad-b2c

我正在尝试从受 Azure AD B2C 保护的 Web 应用程序调用 Web API。应用程序可以通过 Azure 登录页面正常登录。但是,当我在 API 上调用 [Authorize] 端点时,我收到 401 未经授权的响应。

我认为这应该可以使用 VS2017 和 ASP.NET Core 2.1 开箱即用。当我创建这两个应用程序时,我指定了“个人用户帐户”进行身份验证和“连接到云中的现有用户存储”。我发现的示例似乎来自 .NET Core 1 或更早版本,不再相关或使用已弃用的设置。

我的应用程序位于 API 访问部分,在 Azure 中具有读取和写入范围。

如何成功授权我的应用程序调用我的 API?

这是我的应用程序 Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
        .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseAuthentication();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

我的应用程序appsettings.json:

{
  "AzureAdB2C": {
    "Instance": "https://myCompanyPassport.b2clogin.com/tfp/",
    "ClientId": "51dde0de-a204-4b67-b890-068846e17ff1",
    "ClientSecret": "------------------------",
    "CallbackPath": "/signin-oidc",
    "Domain": "myCompanyPassport.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_myCompanySignUpSignIn",
    "ResetPasswordPolicyId": "B2C_1_myCompanyPasswordReset",
    "EditProfilePolicyId": "B2C_1_myCompanyProfile",
    "TaskServiceUrl": "https://localhost:44337/",
    "ApiIdentifier": "https://myCompanyPassport.onmicrosoft.com/taskapi",
    "ReadScope": "read",
    "WriteScope": "write"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

这是我的 API Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
        .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseAuthentication();
    app.UseMvc();
}

我的 API appsettings.json:

{
  "AzureAdB2C": {
    "Instance": "https://myCompanyPassport.b2clogin.com/tfp/",
    "ClientId": "213764b3-8c2a-4bf6-9e69-355495a8f14e",
    "ClientSecret": "------------------------",
    "Domain": "myCompanyPassport.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_myCompanySignUpSignIn",
    "ReadScope": "read",
    "WriteScope": "write"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

最佳答案

你尝试过这个吗(addazurebearer api)

   services.AddAuthentication(sharedOptions =>
        {
            sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
        })
        .AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));

关于asp.net - 使用 .NET Core 2 的 Azure AD B2C Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54027123/

相关文章:

javascript - 无效的表达式术语 '='

javascript - 使用 Jquery 访问所有 RadCombox

azure - 获取 Azure Kubernetes Pod 的线程转储/堆转储

c# - 将用户分配给组,Azure AD Graph Api

asp.net-web-api - 使用Owin时无法使ASP.NET Web API 2帮助页面正常工作

javascript - Angularjs 必须刷新页面才能看到更改

c# - InvalidOperationException 错误

c# - 如何使用 ASP.Net 在 SQL Server 中插入文件?

azure - 不使用管理控制台确定 SQL Azure 区域

c# - 运行时属性的 Web API 条件序列化