我可以在Azure AD B2C中禁用注册吗?换句话说,我不希望客户自己注册帐户,而是希望仅由Azure中的管理员完成。谢谢。
将 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) 我有一个 ASP.net MVC webapp,它使用 Azure AD B2C 对用户进行身份验证。ASP.net mvc 应用程序中的 cookie 设置为在 20 分钟滚动超时后过期。AD B2C中的设置如下:
这是序列:
为什么 Azure AD B2C cookie 不会过期,并且不会要求用户再次进行身份验证?我认为在 AD B2C …
我正在使用 MSAL 来获取访问令牌。它工作正常,我能够登录并检索我的 Active Directory 用户。
但是,当我在使用它访问 API 时遇到问题时,我注意到当我在https://jwt.io/检查令牌时,它显示无效签名。
这是一个问题吗?如果是这样,我该如何解决?
我正在尝试使用 Azure AD B2C 运行ASP.NET Core 2.1 Web 应用程序。我在经过大量研究(以及更多的试验和错误)之后运行了这个,因为文档中的说明有点偏离。
登录/注册过程使用项目设置向导期间的默认脚手架,以及新的Microsoft.AspNetCore.Authentication.AzureADB2C.UI Nuget,从而在启动过程中提供简化但“封闭式”的体验。
目前的问题是,我无法使用与“signin-oidc”不同的自定义回复 URL 来完成这项工作。我已经读过“signin-oidc”以某种方式嵌入到提供程序中,因此是默认设置。
我定义OnboardingController了一个Start操作,我希望用户在注册后登陆,所以我做了以下操作:
localhost:12345/Onboarding/Start有效。页面显示正确。"CallbackPath": "/signin-oidc"为"CallbackPath": "/Onboarding/Start"

C) 我转到租户并将应用程序的回复 URL 更改为localhost:12345/Onboarding/Start. 重要提示:与 ADB2C 示例和指南不同,您必须在回复 URL 后附加 signon-oidc 或自定义请求路径!本地主机:12345 还不够!

我可以确认身份验证有效:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:Information: AuthenticationScheme: AzureADB2CCookie 已登录。Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request completed in 56.201ms
然后,当我在浏览器中手动导航到 /Onboarding/Start 时,我得到
远程身份验证错误:关联失败。
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:12345/Onboarding/start
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:Warning: .AspNetCore.Correlation. state property not found.
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler:Information: Error from …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 文档,它们也是公共客户端]?
我想向管理员通过图形 API 管理的某些特定用户的令牌添加自定义声明。
基本场景如下:
用户已注册我的应用程序。最初,所有用户对资源的访问权限都是有限的。作为管理员,我将通过添加特定声明来更新一些用户,以便我的应用程序将授权用户使用特定资源。
在我的理解中,有几种方法可以在令牌中包含声明(扩展属性)。
通过 azure 门户创建用户属性,并在注册策略中使用它来收集用户的值。就我而言,自定义属性将仅由管理员应用,因此我不会让用户管理此声明。所以这对我来说不是一个好方法,对我来说也没有意义,因为我会在许多用户已经注册后添加新属性,所以将无法收集这些信息。
另一种方式是通过Graph Api添加扩展属性。要完成它,我需要创建一个新应用程序(通过应用程序注册)并通过图形 API 向该应用程序注册扩展属性。然后通过在该应用程序中添加新创建的扩展属性来更新用户(通过图形 API)。最后,我希望这个扩展属性会出现在我的令牌中,但没有机会。它在门户网站、令牌中不可见,但仅在图形 API 响应中可见。
创建我不会的自定义策略,因为不建议非专家使用。
我在第二个解决方案中缺少什么?
设置密钥/机密后,我可以获得这些令牌,但我不知道是否或如何依赖我的应用程序中的 sub 声明。
有关更多背景信息,我的应用程序实际上是一个 B2C 注册应用程序,我将转到 B2C 租户中的 v2 端点,但没有指定策略以使用客户端凭据流(可能导致常规 AAD,非 B2C令牌——我必须在后端加载多个密钥集才能使令牌验证工作,因为我们基本上使用多个令牌源这样做)。在我们的应用程序中,我们使用中间件来验证 JWT Bearer 令牌并通过 sub/oid 查找有效调用者以将任何适当的声明添加到上下文声明标识中。
在这个 client_credentials 案例中,我试图弄清楚 oid 是否与某个服务主体、我的应用程序、代表所使用的客户端机密的 GUID 或其他完全相关的东西 - 以及我是否可以足够依赖它来将它添加到我预期的“用户”数据库具有适当的应用程序权限。理想情况下,会有一种更简单的方法来识别用于服务到服务调用的令牌。
导致:
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 0,
"access_token": "eyJ...pcQ"
}
Run Code Online (Sandbox Code Playgroud)
令牌内容,来自 jwt.io:
我在为 Azure AD B2C 身份验证创建自定义策略时遇到问题,想查看带有关联 ID 的服务器错误的详细信息。
但是,即使我通过 登录到 Powershell 中的 B2C 租户Connect-AzureAD -[hoge].onmicrosoft.com",当我点击 时Get-AzureRmLog,它也需要我登录到我的 Azure 帐户[fuga]@outlook.com(不是 B2C 租户)并且我无法访问 B2C 中的订阅。
那么如何调查 B2C 租户中发生的错误呢?此外,如果有一种方法可以在没有 Powershell 的情况下完成它会更好。
我正在尝试进行设置,但是当转到我创建的客户端应用程序的“发布范围”选项卡时,无法配置为收到此消息“未提供标识符URI”,有人可以建议吗?