在登录/重置密码流程中的不同步骤上单击“下一步/继续”按钮时,Azure B2C 页面会引发内容安全策略错误。如果我输入电子邮件(或没有电子邮件)并在登录的第一步单击“下一步”按钮,则会引发错误,但如果按 Enter 键,则不会出现错误。
图片1:
原因是,一方面,这些页面上的 CSP 不允许使用内联代码,但另一方面,Azure B2C 插入了一些内联代码。表单中的 Fe action="javascript:void(0)"。
图片2:
调试 js 代码显示有一行代码阻止( action="javascript:void(0)")在按 Enter 键时调用此内联操作,并且在单击“下一步”按钮时没有此类阻止。不同步骤上的表单中有几个这样的地方。
这部分代码是由Azure B2C生成的。无法更改 CSP,因为它也在 Azure 端设置。事实上,这个错误并不会阻止登录流程,而是在每个步骤上抛出很多错误
有人有同样的问题并建议如何避免吗?
我目前已在 Azure AD B2C 中使用自定义策略实现了以下内容:
有什么方法可以实现用户必须验证两次而不是三次吗?如果用户尚未为其社交帐户设置 2FA,我想保留 2FA。
例如,是否可以检查社交登录是否使用了 2FA?或者是否可以对社交帐户登录实施 2FA?
我的设置使用了以下模板:
我正在使用 Azure AAD B2C 来管理我的用户和身份验证流程。我正在尝试创建一种用户体验,用户可以使用不同的帐户登录。用户应该能够注销其帐户,然后单击登录并能够提供不同的用户名和密码。
但是,目前我退出了。我可以通过 F12 调试器确认所有 cookie 均已清除。然后我单击登录,它让我重新登录到以前的帐户,而无需询问我的用户名和密码。
我不确定发生了什么或为什么。这是我的登录代码。
public IActionResult SignIn([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl, AllowRefresh = true };
properties.Items["policy"] = "B2C_1_SignUpIn";
return Challenge(properties, scheme);
}
Run Code Online (Sandbox Code Playgroud)
这是我的退出代码。
public async Task<IActionResult> SignOutAsync([FromRoute] string scheme)
{
HttpContext.Session.Clear();
if (HttpContext.Request.Cookies.Count > 0)
{
var test = HttpContext.Request.Cookies.ToList();
var siteCookies = HttpContext.Request.Cookies.Where(c => c.Key.Contains(".AspNetCore.") || c.Key.Contains("Microsoft.Authentication"));
foreach (var cookie in siteCookies)
{
Response.Cookies.Delete(cookie.Key);
}
}
await …Run Code Online (Sandbox Code Playgroud) 将 Authorize 属性与我在 Startup.cs 中定义的策略一起使用时遇到问题。我编辑了我的控制器以手动检查声明。我可以看到包含具有正确范围的范围声明的声明,但是当我手动检查该声明/范围时,它返回为 false。我使用 Azure AD B2C 作为我的身份服务器并成功获得了一个经过验证的令牌。
这是我的 Startup.cs 中的代码:
services.AddAuthorization(options =>
{
var policyRead = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.RequireClaim("http://schemas.microsoft.com/identity/claims/scope", "vendor.read")
.Build();
options.AddPolicy("VendorRead", policyRead);
var policyWrite = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.RequireClaim("http://schemas.microsoft.com/identity/claims/scope", "vendor.write")
.Build();
options.AddPolicy("VendorWrite", policyWrite);
});
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(jwtOptions =>
{
jwtOptions.Authority = $"{Configuration["AzureAdB2C:Instance"]}/{Configuration["AzureAdB2C:TenantId"]}/{Configuration["AzureAdB2C:SignUpSignInPolicyId"]}/v2.0/";
jwtOptions.Audience = Configuration["AzureAdB2C:ClientId"];
jwtOptions.RequireHttpsMetadata = true;
jwtOptions.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = $"{Configuration["AzureAdB2C:Instance"]}/{Configuration["AzureAdB2C:TenantId"]}/v2.0/", …Run Code Online (Sandbox Code Playgroud) OAuth 2.0 规范定义了机密和公共客户端。https://tools.ietf.org/html/rfc6749#section-2.1
这是根据 OAuth 2.0 规范的处方
但是,根据 Microsoft 文档,AD B2C 的处方如下 https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-oauth-code
基于上述推论,我们对 Web 应用程序和 SPA 很清楚,这里没有混淆。
但是,对于桌面和移动应用程序,为什么 Microsoft 建议使用 Auth 代码授予流程而不是隐式流程 [即使根据 Microsoft 文档,它们也是公共客户端]?
是否可以在不重定向的情况下注销?
每次我注册用户时,我都需要验证用户是否在外部数据库中(带有邀请令牌的数据库)。我是在注册完成后才做的。当我发现用户不应该被允许登录时,我需要调用logout以清除登录弹出窗口中的 cookie/存储(如果我在再次打开 singin 弹出窗口后不这样做,azure 会尝试自动登录用户并且不允许,例如,重新注册)。在我的情况下,页面的刷新是不必要的,因为它是一个注册过程,我已经在登录页面进行刷新。
问题
我正在使用 Azure API 管理服务构建 API。我已经创建了一个 Azure AD B2C 租户,我可以通过它来授权对上述 API 的调用。
我能够成功设置租户;但是,我在尝试添加 Azure Active Directory B2C 类型的身份提供程序时遇到了问题。
我正在关注 2017 年的演练:https : //docs.microsoft.com/en-us/azure/api-management/api-management-howto-aad-b2c
问题是在 Azure 文档中未涵盖的实际创建向导中发生了一些更改。还有一个额外的字段是必需的:权威;那里有什么?
我试过的
到目前为止,我已经在网上搜索过,我唯一能找到的是 ASP.NET 应用程序引用以下架构的权限:
https://login.microsoftonline.com/tfp/ {tenant}/B2C_1_{signup_policy}
我尝试了此操作(填写我的租户和注册策略独有的缺失值),但收到错误消息:“一个或多个字段包含不正确的值:Azure Active Directory B2C 权限无效。”
有人可以告诉我应该去那里做什么,或者至少指出我更新的 Azure 文档的方向吗?同样,上面的链接文档是 2017 年的,没有提到授权字段。
azure azure-active-directory azure-api-management azure-ad-b2c
我的最新项目让我制作了一个 MVC 应用程序。该应用程序的基本要求是允许用户使用 Azure ADD B2C 登录并允许用户操作 Azure 应用服务数据库上的数据。按照此处的这篇文章,我已成功将用户登录到 B2C。但是,从登录应用服务开始,我无法进入应用程序的第二部分。我知道我需要从 B2C 获取访问令牌才能传递给应用程序服务进行验证。我的问题是我只能获得一个 ID 令牌,该应用服务应该向我发送一个 401。我的 OWIN 启动类包含以下内容,就像文章一样:
public class Startup
{
// App config settings
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string aadInstance = ConfigurationManager.AppSettings["ida:AadInstance"];
private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
private static string redirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"];
// B2C policy identifiers
public static string SignUpPolicyId = ConfigurationManager.AppSettings["ida:SignUpPolicyId"];
public static string SignInPolicyId = ConfigurationManager.AppSettings["ida:SignInPolicyId"];
public static string ProfilePolicyId = ConfigurationManager.AppSettings["ida:UserProfilePolicyId"];
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下 URL 中提到的自定义策略在 Azure Active Directory B2C 中配置 ROPC 流。
https://docs.microsoft.com/en-us/azure/active-directory-b2c/ropc-custom
但是在测试 ROPC 策略时出现以下错误。{ "error": "invalid_request", "error_description": "AADB2C90083: 请求缺少必需参数:grant_type。\r\n相关 ID:b4153dfe-4296-4b68-850f-ee30ac4d86b0\r\n时间戳:2019- 11:53:23Z\r\n" }
我已经使用 Visual Studio 模板创建了一个新的 Blazor 应用程序,并在项目创建期间使用向导添加了 B2C。
所有这些都适用于身份验证。我可以使用我最喜欢的身份提供者登录并接收 id_token。我不知道在哪里可以获得 id_token,但我可以在我的用户身份中看到声明。
我需要帮助的是如何获取声明中的信息以获取访问令牌。我需要这个令牌来调用我的端点。
这似乎应该是简单而常见的事情,但我似乎找不到任何好的例子。
在普通的 MVC 应用程序中,我可以通过 ConfidentialClientApplicationBuilder.AcquireTokenByAuthorizationCode 获得它,但这在 Blazor 中不起作用(除非我做错了什么)。
我试过这个:https : //docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-access-tokens
我认为它会起作用。如何在我的 blazor 应用程序中获取“代码”(id_token)?这是在幕后解码的内容,我所能找到的只是解码“代码”所产生的声明。
我已经使用 azure 的“运行用户流程”来访问示例 id_token("code") 并将其粘贴到我的项目中并在上面的链接中进行调用,它似乎有效。我遇到了权限问题,但这至少是一个成功的调用。
也许如果我可以访问 id_token,我就可以从那里开始工作?
azure-ad-b2c ×10
azure ×4
c# ×3
.net-6.0 ×1
aad-b2c ×1
access-token ×1
asp.net-mvc ×1
cookies ×1
msal.js ×1
oauth-2.0 ×1