首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AzureAD B2C ROPC在ASP.NET核中的认证

AzureAD B2C ROPC在ASP.NET核中的认证
EN

Stack Overflow用户
提问于 2020-10-29 15:03:42
回答 1查看 546关注 0票数 0

我有一个ASP.NET核心WebApplication (REST ),它使用AzureB2C进行身份验证。这是Startup.cs

代码语言:javascript
复制
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
                .AddAzureADB2CBearer(options =>
                {
                    options.Instance = "https://tenant.b2clogin.com/tfp/";
                    options.ClientId = "...";
                    options.Domain = "tenant.onmicrosoft.com";
                    options.SignUpSignInPolicyId = "B2C_1A_signup_signin";
                });
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
        }
    }

为了支持自动测试中的身份验证,我确实尝试过使用client credential流,但是发现了在AzureB2C中不支持它。接下来,我遇到了ROPC流,它被建议为替代方案(例如:这里)。但我不能让它起作用。

如果我收到一个令牌使用ROPC流。

代码语言:javascript
复制
            dynamic result = await $"https://{tenantName}.b2clogin.com"
                .AppendPathSegment($"{tenantName}.onmicrosoft.com")
                .AppendPathSegment("B2C_1_ROPC_Auth")
                .AppendPathSegment("oauth2/v2.0/token")
                .SetQueryParams(new
                    {
                        client_id,
                        scope = $"6d1aa76b-10fb-47bb-bbec-5d7f7a4e08c4 openid offline_access",
                        username,
                        password,
                        grant_type = "password",
                        repsonse_type = "token id_token"
                    }
                )
                .PostAsync(new StringContent(""))
                .ReceiveJson();

这个记号看上去很好也很有效。但是,如果我试图使用它来验证对其他Api的调用,则会收到以下错误:

WWW-身份验证error="invalid_token",error_description=“签名密钥未找到”

经过一些调查,看起来RestAPI正在尝试使用我的B2C_1A_signup_signin策略的众所周知的配置来验证这个孩子。这是合理的,因为它是AddAzureADB2CBearer选项的一部分。如果我将策略更改为B2C_1_ROPC_Auth,则令牌将被接受。

但我确实需要这两个标记才能工作,那些使用B2C_1A_signup_signin流和ROPC流令牌创建的令牌。

我如何配置我的应用程序来接受这两种配置?

EN

回答 1

Stack Overflow用户

发布于 2020-10-29 16:50:23

如果仅通过无头身份验证访问此API,则使用Azure AD客户端凭据对其进行保护。您的Azure广告B2C中包含一个Azure广告。按照这里的说明:https://learn.microsoft.com/en-us/azure/active-directory/develop/scenario-daemon-overview

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64593807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档