OWIN,Core和B2C - 多重身份

时间:2017-03-18 20:20:03

标签: asp.net-core owin azure-ad-b2c owin-middleware

我正在尝试使用本地帐户在中签名,然后使用社交帐户签署 up ,以便我可以在我自己的数据库中将两者链接在一起。这样,以后他们可以使用B2C并登录本地或社交提供商,最终在我的系统中使用相同的帐户。

诀窍似乎是安全地将签名的本地用户(如我的用户的数据库ID)中的信息传递给社交提供商的注册过程,以便它可以返回到新用户的声明中。 / p>

我考虑过将它添加到AuthenticationOptions的RedirectUrl中,但我无法弄清楚它可能有多么不安全。如果该端点受[Authorize]属性保护,则必须在调用之前对用户进行身份验证。

将本地用户的数据库ID添加到重定向中似乎是不安全的。即使用户将被验证,被盗令牌和修改后的查询字符串也会想要错误的帐户。

有没有办法让数据通过B2C流程进行往返?

{EDIT}忘记提及这是一个网络应用程序。本机客户端我了解如何保存令牌。

1 个答案:

答案 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