【问题标题】:Using modern Azure AD B2C Library to get an access token for API pass through使用现代 Azure AD B2C 库获取 API 传递的访问令牌
【发布时间】:2019-11-21 09:00:31
【问题描述】:

在我看来,在最近的文档中,带有 V2 用户流的 Azure AD B2C 被宣传为可以直接开箱即用,但你得到的只是 ASP.NET Core Web App --> 带有 JWT Bearer 授权的 API 是一些糟糕的 Postman 示例和一堆令人困惑、过时的文档和代码示例。

使用下面的通用身份验证机制作为 IdP 连接到 Azure B2C 租户,是否可以从 Azure B2C 提供商请求访问令牌,而无需通过更复杂的 MSAL 或 ADAL 库授权路由?如果没有,那么经过几天的搜索,我还没有找到一个详细说明这个简单流程的清晰示例。甚至 GitHub 示例也充斥着陈旧、未解决的问题和许多非 MS 拉取请求。

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

这确实是当今非常常见且几乎是强制性的场景,因此可以很容易地使用较新的 Microsoft.AspNetCore.Authentication.AzureADB2C.UI 库集成到代码流中?

更新 1

例如,在测试不同的 IdP(例如 Auth0)时,它会直接为任何请求的 API 受众检索访问令牌,即使使用授权代码流且额外代码最少。

考虑到如今访问受保护资源的常见模式,为什么这在 Azure AD B2C 中是不可能的?这是在 B2C V2 路线图上吗?

【问题讨论】:

  • 很抱歉文档体验不佳。我们正在积极努力改进它。您能否提供您所指的您遇到问题的文档?我会调查他们,看看我们是否可以澄清这些问题。我目前正在研究这个,看看我是否可以获得使用服务的代码示例。

标签: access-token azure-ad-b2c


【解决方案1】:

我已经继续并分叉了一个现有的旧样本并相应地更新了它。此示例将用于从 B2C 租户获取访问令牌。

请看:https://github.com/FrankHu-MSFT/active-directory-b2c-dotnetcore-webapi

我已经使用 V2 B2C 示例策略对其进行了测试,它会自动重定向到 JWT.MS 以显示您刚刚收到的访问令牌。

您将能够找到 startup.cs 中定义的 configureservices 方法

根据代码:

     public void ConfigureServices(IServiceCollection services)
    {
          services.AddAuthentication(options =>
          {
            options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
          })
            .AddJwtBearer(jwtOptions =>
            {
              jwtOptions.Authority = $"https://login.microsoftonline.com/tfp/{Configuration["AzureAdB2C:Tenant"]}/{Configuration["AzureAdB2C:Policy"]}/v2.0/";
              jwtOptions.Audience = Configuration["AzureAdB2C:ClientId"];
              jwtOptions.Events = new JwtBearerEvents
              {
                OnAuthenticationFailed = AuthenticationFailed
              };
            });

        // Add framework services.
        services.AddMvc();
    }

您需要按照新的步骤 5 更新 appsettings 和 index.cshtml 文件:https://github.com/FrankHu-MSFT/active-directory-b2c-dotnetcore-webapi#optional-step-5-configure-the-sample-with-your-app-coordinates

这是否回答了您的问题?如果有什么遗漏,请评论并告诉我。

【讨论】:

  • 嗨弗兰克,感谢您抽出宝贵时间回复,感谢您努力更新该存储库。不幸的是,我指的是 Web 客户端在例如隐式流中执行它的初始身份验证请求,它返回 id_token 和 access_token 而不必使用糟糕的 MSAL/ADAL 方法。不是 API 方面的事情。您生成的代码与以下标准 API 代码几乎相同:services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme) .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
  • 请参阅上面的更新 1 评论。
  • 那么你想使用什么代码?您是否尝试对授权和令牌端点进行手动获取/发布调用?类似于 AAD 的这个 git 的东西? github.com/Azure-Samples/…使用MSAL/ADAL要简单得多。
  • 我尝试使用最新的 ASP.NET Core 2.2/3.0 预览库。目标是在挖掘过时的示例存储库时不必手动运行。您刚才提到的示例是针对 .NET 框架的,只是为了让 API 从 AAD 中获取令牌。我的问题是关于 Azure AD B2C,使用 ASP.NET Core for WebClient to API。不再重要了,看起来我将继续使用 Auth0(出于上述原因)。还是谢谢。
  • 很遗憾听到这个消息。我将将此信息转发给处理 B2C 的产品组,以改进我们的 B2C 产品以满足您需要的业务标准。祝 Auth0 好运,希望您能够获得所需的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2021-11-12
  • 2021-03-03
  • 2019-05-15
  • 1970-01-01
相关资源
最近更新 更多