SignInAsAuthenticationType允许我获取OAuth令牌而不会覆盖现有声明吗?

时间:2017-01-27 01:49:08

标签: c# asp.net-web-api oauth owin asp.net-identity-3

我需要用户使用开箱即用的身份验证登录网站。我现在需要链接到Google(和其他服务)中的用户驱动器。我想使用ASP.Net Identity OAuth身份提供程序来处理令牌交换,但我不希望它触及现有的UserCredential或将其用于SignIn的{​​{1}}

我的目标是防止

  • UserPrincipal返回导致修改当前登录用户身份的AuthenticateCoreAsync
  • 使用从Google获取的声明来快速验证身份验证系统的用户。 (我应该已经通过其他方式登录了用户)
  • 防止意外令牌/ cookie用于创建有效会话,创建权限提升方案?

问题

  1. 设置自定义grantIdentity对AuthenticationTicket有什么影响?

  2. SignInAsAuthenticationType是否解决了我的需求?

  3. 如果没有,何时使用?

  4. 使用Google提供商的理论代码

    IOwinContext.Authentication.SignIn()

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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