0

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

诀窍似乎是安全地将信息从已登录的本地用户(例如我的该用户的数据库 ID)传递到社交提供者的注册过程,以便它可以在新用户的声明中返回。

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

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

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

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

4

1 回答 1

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 是他们刚刚完成的注册的信息。

现在你可以做任何你想在你自己的数据库中连接两者的魔法。

高温高压

于 2017-03-21T13:26:13.300 回答