我正在尝试使用本地帐户在中签名,然后使用社交帐户签署 up ,以便我可以在我自己的数据库中将两者链接在一起。这样,以后他们可以使用B2C并登录本地或社交提供商,最终在我的系统中使用相同的帐户。
诀窍似乎是安全地将签名的本地用户(如我的用户的数据库ID)中的信息传递给社交提供商的注册过程,以便它可以返回到新用户的声明中。 / p>
我考虑过将它添加到AuthenticationOptions的RedirectUrl中,但我无法弄清楚它可能有多么不安全。如果该端点受[Authorize]属性保护,则必须在调用之前对用户进行身份验证。
将本地用户的数据库ID添加到重定向中似乎是不安全的。即使用户将被验证,被盗令牌和修改后的查询字符串也会想要错误的帐户。
有没有办法让数据通过B2C流程进行往返?
{EDIT}忘记提及这是一个网络应用程序。本机客户端我了解如何保存令牌。
答案 0 :(得分:1)
好的,如果这有助于其他人尝试这样做......
您需要使用[Authorize]
属性来保护控制器操作。这样,在使用外部身份提供商(例如Facebook)的B2C注册政策进行身份验证后,即将到来的索赔将会出现。
在该政策的OpenIdconnectionOptions
中,指定一个事件处理程序
Events = new OpenIdConnectEvents
{
...
OnTicketReceived = TicketReceived,
...
}
然后在方法中:
private Task TicketReceived(TicketReceivedContext context)
{
var incomingClaims = context
.HttpContext
.User
.Identities
.First()
.Claims;
var newClaims = context
.Principal
.Identities
.First()
.Claims;
context
.Principal
.Identities
.First()
.AddClaim(new System.Security.Claims.Claim("myClaim", "myClaimValue"));
}
incomingClaims包含用户在决定添加新提供程序时登录的信息,而newClaims是来自刚刚完成的注册的信息。
现在,您可以在自己的数据库中执行任何想要连接两者的魔法。
HTH