C# SignInAsAuthenticationType是否允许我在不覆盖现有声明的情况下获取OAuth令牌?
我需要一个用户登录到一个网站使用开箱即用的身份验证Facebook。我现在需要链接到谷歌(和其他服务)中的用户驱动器。我想使用ASP.Net Identity OAuth Identity providers来处理令牌交换,但我不想让它接触现有的UserCredential或将其用于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 一个用户使用从谷歌获得的声明来简化认证系统。(我应该已经让用户通过其
用户主体的登录
我的目标是防止
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帐户中的情况。。。除其他威胁外