使用现代的Azure AD B2C库获取API传递的访问令牌

时间:2019-07-11 15:26:21

标签: access-token azure-ad-b2c

在我最近的文档中,似乎将带有V2用户流的Azure AD B2C宣传为开箱即用,但是ASP.NET Core Web App的全部好处->具有JWT Bearer授权的API差劲的邮递员示例以及一堆令人困惑,过时的文档和代码示例。

使用下面的常见身份验证机制作为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路线图上吗?

1 个答案:

答案 0 :(得分:0)

我继续前进,分叉了一个现有的旧样本并进行了相应的更新。此示例将用于从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

这能回答您的问题吗?如果有什么遗漏,请发表评论并告诉我。