Azure ad b2c 将参数传递给注册策略

Azure ad b2c 将参数传递给注册策略,azure-ad-b2c,Azure Ad B2c,我正在创建B2C用户与社会身份提供商的帮助下注册的政策,但我们有一个要求添加一些用户属性(扩展属性)到这个新用户。例如,为用户设置“AccountId” 如果我添加“AccountId”作为注册属性,并输入一些值,它工作正常,当我通过Graph API检查用户属性时,“AccountId”是正确的 但是在这种情况下,“AccountId”不应该是可编辑的,也不应该对用户可见,我只希望注册策略将“AccountId”添加到使用facebook创建的用户中,作为注册页面上的隐藏字段 是否可以从使

我正在创建B2C用户与社会身份提供商的帮助下注册的政策,但我们有一个要求添加一些用户属性(扩展属性)到这个新用户。例如,为用户设置“AccountId”

如果我添加“AccountId”作为注册属性,并输入一些值,它工作正常,当我通过Graph API检查用户属性时,“AccountId”是正确的

但是在这种情况下,“AccountId”不应该是可编辑的,也不应该对用户可见,我只希望注册策略将“AccountId”添加到使用facebook创建的用户中,作为注册页面上的隐藏字段


是否可以从使用Azure B2C广告的ASP.Net MVC应用程序将此值传递到注册页面并将其与注册属性关联?可以通过参数(&accountid=1234)或通过一些OpenId属性来完成吗?

Azure AD B2C目前不接受用于填充用户配置文件属性的任何额外查询字符串参数。中有此请求

但是,您可以通过在自己的应用程序中使用图形实现它来实现相同的结果

对于您的特定示例,您需要确保正在发送配置您的注册或注册/登录策略以发送newUser声明,然后在身份验证后使用该策略调用图表并进行必要的更新

下面是一个示例,演示如何实现这一点,假设您按照或使用ASP.Net,在设置OpenIdConnectAuthenticationOptions时利用SecurityTokenValidated通知,如下所示:

新的OpenIdConnectAuthenticationOptions
{
//为简洁起见跳过
// (...)
通知=新的OpenIdConnectAuthenticationNotifications
{
// (...)
SecurityTokenValidated=OnSecurityTokenValidated
},
// (...)
};
并使用ClientCredentials流调用Graph API进行如下更新:

securitytokenvalidated(SecurityTokenValidatedNotification)上的专用异步任务
{
字符串userObjectId=notification.AuthenticationTicket.Identity.FindFirst(“http://schemas.microsoft.com/identity/claims/objectidentifier)价值;
bool newUser=false;
bool.TryParse(notification.AuthenticationTicket.Identity.FindFirst(“newUser”)?.Value,out newUser);
如果(!newUser)返回;
ClientCredential=新的ClientCredential(graphClientId、graphClientSecret);
AuthenticationContext authContext=新的AuthenticationContext(“https://login.microsoftonline.com/sacacorpb2c.onmicrosoft.com");
AuthenticationResult=等待authContext.AcquireTokenAsync(“https://graph.microsoft.com“,凭证);
字符串正文=“{\”扩展名为e5bf5a2db0c9415cb62661a70d8f0a68\U AccountId\”:\“您的新值”\”;
HttpClient http=新的HttpClient();
字符串url=”https://graph.microsoft.com/beta/users/“+userObjectId+”/”;
HttpRequestMessage请求=新的HttpRequestMessage(新的HttpMethod(“补丁”),url)
{
Content=newstringcontent(body,Encoding.UTF8,“application/json”)
};
request.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,result.AccessToken);
HttpResponseMessage response=等待http.SendAsync(请求);
返回;
}
重要提示:

  • 如果要更新内置属性,可以使用Azure AD Graph(),但是如果要更新自定义属性,则需要查询Microsoft Graph()的Beta端点。如果要使用自定义属性,请注意它们有更时髦的名称(前面有GUID),使用,查询/beta/用户并查看完整属性名称
  • 您需要注册一个单独的(与您用于登录/升级的应用程序不同)应用程序,该应用程序具有与图表对话的权限。有关更多信息,请参阅,尽管本文并未请求Azure AD图表的权限,但您可能需要按照我前面的观点获取Microsoft图表的权限

仅供参考,您可以通过自定义策略实现此目的。请参阅。