Azure AD B2C 是一项非常酷的功能,提供注册/登录功能。不过,我不知道如何具体自定义自定义用户流程部分中的注册页面。使用此链接https://learn.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-ui-customization我通过对 Azure 注入到 id 的 div 中的内容进行样式化来自定义登录页面api。在该默认页面上,它还有一个don't have an account? Sign up 'here'. 不过,我没有看到可以为注册页面添加资源的地方。除了我如何自定义登录之外,有谁知道如何具体自定义注册页面?
顺便说一句,我正在使用 Netlify 托管登录页面。我没有使用他们在我引用的链接中使用的 blob 存储。任何帮助都会很棒!谢谢你!
我已经按照本教程逐行进行操作了。它教授如何使用所有代码生成 blazor wasm 托管应用程序以通过 Azure B2C 进行身份验证。我所要做的就是将正确的值替换到正确的位置。
dotnet new blazorwasm -au IndividualB2C --aad-b2c-instance "{AAD B2C INSTANCE}" --api-client-id "{SERVER API APP CLIENT ID}" --app-id-uri "{SERVER API APP ID URI}" --client-id "{CLIENT APP CLIENT ID}" --default-scope "{DEFAULT SCOPE}" --domain "{TENANT DOMAIN}" -ho -o {APP NAME} -ssp "{SIGN UP OR SIGN IN POLICY}"
不幸的是,当我运行它时,我收到此错误:
很难说问题出在哪里。我用谷歌搜索了该错误,但找不到有关该问题的任何文档。
谢谢你的帮助。
这是我用来创建 Blazor 应用程序的脚本
dotnet new blazorwasm -au IndividualB2C --aad-b2c-instance "testb2c.onmicrosoft.com" --api-client-id "3b113bda-55d5-47eb-9d8c-5e44375f1341" --app-id-uri "https://testb2c.onmicrosoft.com/testapi" --client-id "3b9fd635-a87f-4899-ad04-9a73fc6f4e21" --default-scope "api.read" --domain "testb2c.onmicrosoft.com" -ho -o BlazorCmdLine -ssp …
我想通过 graph api 或 sdk 为整个 b2c 实例创建“用户自定义属性”。就像我按照下面引用的 ms文档通过 Azure 门户所做的那样。
1. Sign in to the Azure portal as the global administrator of your Azure AD B2C tenant.
2. Make sure you're using the directory that contains your Azure AD B2C tenant by switching to it in the top-right corner of the Azure portal.
3. Select your subscription information, and then select Switch Directory.
4. Choose All services in the top-left corner of the Azure portal, search for …Run Code Online (Sandbox Code Playgroud) 我想通过请求 URL 将参数传递给 B2C,然后能够将其作为访问令牌中的声明发送出去。我猜我需要在 ClaimType 中捕获它。我该怎么办?
谢谢!
我们使用 C# 中的 Graph API 从 AD 读取有关 B2C 中用户设置的数据。
我们在 b2c 环境中设置了许多扩展属性,并且希望能够在 C# 应用程序中为用户读取这些属性的值。
我们可以使用以下命令成功请求获取用户的详细信息:
graphServiceClient.Users[userId].Request().Select("id,displayName").GetAsync();
Run Code Online (Sandbox Code Playgroud)
它返回指定属性的详细信息。
但是,我们找不到通过此请求取回扩展属性值的选项。我们已使用存储属性的应用程序的 guid 包含了属性的名称,但不返回属性。
我们还尝试了以下请求,该请求返回“未找到具有给定 id 的扩展”的响应:
var extensionDetails = graphServiceClient.Users[userId].Extensions["extension_{guidWithDashesRemoved}_{attributeName}"].Request().GetAsync();
Run Code Online (Sandbox Code Playgroud)
我们可以通过以下 get 请求在 Postman 中成功完成此操作:
https://graph.microsoft.com/v1.0/users?$select=id,displayName,givenName,postalCode,extension_{guidWithDashesRemoved}_{attributeName}
Run Code Online (Sandbox Code Playgroud)
有人能够取回扩展属性值吗?
我有一个带有 Swagger 的 Web API 和一个 Azure AD B2C 租户。
React 应用程序能够从 B2C 获取令牌,例如:
msalInstance.loginRedirect({
scopes: ["openid", "offline_access", process.env.MY_CLIENT_ID],
});
Run Code Online (Sandbox Code Playgroud)
然而 Swagger Authorize 函数返回AADB2C90205,This+application+does+not+have+sufficient+permissions+against+this+web+resource+to+perform+the+operation
AddSwagger中的代码是Startup.cs:
private void AddSwagger(IServiceCollection services)
{
var azureAdB2C = new AzureAdB2CSettings();
this.Configuration.Bind("AzureAdB2C", azureAdB2C);
var authUrl = $"https://{azureAdB2C.TenantName}.b2clogin.com/{azureAdB2C.TenantName}.onmicrosoft.com/{azureAdB2C.SignUpSignInPolicyId}/oauth2/v2.0";
services.AddOpenApiDocument(
document =>
{
document.AddSecurity(
"bearer",
Enumerable.Empty<string>(),
new OpenApiSecurityScheme
{
Type = OpenApiSecuritySchemeType.OAuth2,
Description = "Azure AAD Authentication",
Flow = OpenApiOAuth2Flow.Implicit,
Flows = new OpenApiOAuthFlows()
{
Implicit = new OpenApiOAuthFlow()
{
Scopes = …Run Code Online (Sandbox Code Playgroud) 我能够很好地创建和获取用户:
// This works!
var graphServiceClient = new GraphServiceClient(
$"https://graph.microsoft.com/beta",
AuthenticationProvider);
var user = await graphClient.Users[userId].Request().GetAsync();
if (user.AdditionalData == null)
user.AdditionalData = new Dictionary<string, object>();
user.AdditionalData[$"extension_xxxxxxx_Apps] = "TestValue";
// this does not work!
result = await graphClient.Users[user.Id].Request().UpdateAsync(msGraphUser);
Run Code Online (Sandbox Code Playgroud)
对于 xxxxxxx,我尝试了租户中 b2c-extensions-app 中的客户端 ID 和对象 ID。
例外
Microsoft.Graph.ServiceException:'代码:Request_BadRequest 消息:以下扩展属性不可用:extension_xxxxxxx_Apps。
如何从 GraphServiceClient 设置自定义属性?
有没有办法在编排步骤的前提条件步骤中检查声明是否设置为空字符串?
我已经尝试过以下方法,但它不起作用,它从不执行 SkipThisOrchestrationStep
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>readOnlyPhone</Value>
<Value></Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
Run Code Online (Sandbox Code Playgroud)
另外我也尝试过使用 ClaimExists 但这也不起作用
<Preconditions>
<Precondition Type="ClaimsExists" ExecuteActionsIf="false">
<Value>readOnlyPhone</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
Run Code Online (Sandbox Code Playgroud)
背景,声明是由 RestfulProvider 技术配置文件设置的,API 将在有效负载中返回"phoneNumber": ""
我有一个用户流 B2C_1_singupsingin1 我添加了一个 api 连接器,将其嵌入到该流和 API 调用的端点 url 中。使用的文章: https://learn.microsoft.com/en-us/azure/active-directory-b2c/add-api-connector-token-enrichment ?pivots=b2c-user-flow
从文章中可以清楚地看出,API 连接器具体化为 HTTP POST 请求,发送自定义属性。
我的 Web api 有一个端点,代码如下:
[HttpPost("enrich")]
public IActionResult Enrich([FromBody] JsonElement body)
{
var responseProperties = new Dictionary<string, object> //for example
{
{ "version", "1.0.0" },
{ "action", "Continue" },
{ "postalCode", "12349" },
{ "userId", 123 }
};
return new JsonResult(responseProperties) { StatusCode = 200 };
}
Run Code Online (Sandbox Code Playgroud)
当我启动自定义流程时,一切正常,我可以到达 api 中的该端点。但存在一个问题,JsonElement 主体不包含自定义属性。我在里面看到了body.ValueKind = Undefined。告诉我我做错了什么?
另外,毕竟,我想添加一个自定义的“userId”声明,其中包含数据库中的一些值。以便将其包含在后续发行的token中。上面的代码对此正确吗?
所以我只为个人帐户注册了一个应用程序。然后,我使用 Visual Studio 生成了一个示例 blazor 项目并设置了重定向 url https://localhost:7213/signin-oidc。当我启动项目时,它正确地将我重定向到/signin-oidc端点并显示以下异常页面
OpenIdConnectProtocolException:消息包含错误:“invalid_request”、error_description:“AADSTS9002331:应用程序...配置为仅供 Microsoft 帐户用户使用。请使用 /consumers 端点来处理此请求。
在文档中找不到有关消费者端点的任何内容。
尝试更改/singin-oidc为/consumers但没有帮助。
有人有解决方案吗?
谢谢