C# SignInAsAuthenticationType是否允许我在不覆盖现有声明的情况下获取OAuth令牌?

C# SignInAsAuthenticationType是否允许我在不覆盖现有声明的情况下获取OAuth令牌?,c#,asp.net-web-api,oauth,owin,asp.net-identity-3,C#,Asp.net Web Api,Oauth,Owin,Asp.net Identity 3,我需要一个用户登录到一个网站使用开箱即用的身份验证Facebook。我现在需要链接到谷歌(和其他服务)中的用户驱动器。我想使用ASP.Net Identity OAuth Identity providers来处理令牌交换,但我不想让它接触现有的UserCredential或将其用于用户主体的登录 我的目标是防止 AuthenticateCoreAsync返回导致修改当前登录用户身份的AuthenticationTicket 一个用户使用从谷歌获得的声明来简化认证系统。(我应该已经让用户通过其

我需要一个用户登录到一个网站使用开箱即用的身份验证Facebook。我现在需要链接到谷歌(和其他服务)中的用户驱动器。我想使用ASP.Net Identity OAuth Identity providers来处理令牌交换,但我不想让它接触现有的UserCredential或将其用于
用户主体的
登录

我的目标是防止

  • AuthenticateCoreAsync
    返回导致修改当前登录用户身份的
    AuthenticationTicket
  • 一个用户使用从谷歌获得的声明来简化认证系统。(我应该已经让用户通过其他方式登录)
  • 防止使用意外令牌/cookie创建有效会话,从而创建权限提升方案
问题

  • 设置自定义GrantId实体对
    IOwinContext.Authentication.SignIn()
    有什么影响

  • SignInAsAuthenticationType解决了我的需要吗

  • 如果没有,何时使用

  • 使用谷歌提供商的理论代码

    // The cookie needs to be First in the chain.
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = "CustomExternal",
        AuthenticationMode = AuthenticationMode.Passive,
        CookieName = "MyAwesomeCookie",
        ExpireTimeSpan = TimeSpan.FromMinutes(5),
        //Additional custom cookie options....
    });
    
    //Note that SignInAsAuthenticationType == AuthenticationType
    app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions
    {
        AuthenticationType = "GoogleBackOffice",
        ClientId = "abcdef...",
        ClientSecret = "zyxwv....",
        SignInAsAuthenticationType = "CustomExternal"
    });
    

    Visual Studio 2015 MVC个人用户帐户模板执行类似的操作。创建第一个帐户(使用本地用户名和密码或远程提供商),然后可以将其他身份链接到该帐户。它通过在登录期间维护两个cookie来实现链接,一个用于应用程序,另一个用于外部身份

    如果查看LinkLoginCallback下的ManageController,您应该能够在此时调整逻辑以存储外部标识,但不能授予它对应用程序的登录访问权


    换句话说,这样的逻辑应该在控制器逻辑中的授权层进行管理,而不是在身份验证中间件中的身份验证层进行管理。

    如果ClaimsPrincipal.Identity.IsAuthenticated为false,则用户将被质疑登录页面。

    为了澄清,您希望通过用户的Facebook身份登录用户,然后你想添加其他身份,比如谷歌,这样你就可以访问他们的资源,但你不想让用户能够通过其他提供商(如谷歌)登录到你的网站?@Tratcher完全正确。虽然我使用Facebook身份作为“核心ID”,但实际上我将创建自己的身份中间件,作为现有OpenIDConnect中间件的一个分支。(参考Katana源代码)另请参阅添加多个身份验证类型的功能。。。可能是相关的,但请求登录并内置CSRF保护的OpenID Connect代码在调用SignIn时会自动创建ASP.NET标识。我不想叫任何签名。据我所知,SignanAuthenticationType允许这样做(无需调整逻辑),但我希望确保正确实现它。第二个cookie的登录有什么问题?只要它不是你的应用程序cookie,它就不会被用于授权。我不完全确定。我确实想防止不相关的谷歌用户Mallory被添加到Alice或Bob的常规Facebook帐户中的情况。。。除其他威胁外