C# 如何使用两个外部OAuth 2 OWIN提供程序(用于单独登录和获取LinkedIn配置文件数据)

C# 如何使用两个外部OAuth 2 OWIN提供程序(用于单独登录和获取LinkedIn配置文件数据),c#,razor,oauth,linkedin,owin,C#,Razor,Oauth,Linkedin,Owin,我们希望允许登录到MVC Razor网站,使用OAuth提供商的常见分类: e、 g 谷歌/谷歌+ Microsoft帐户 脸谱网 LinkedIn 这些功能本身都可以很好地工作,但是我们需要有额外的选项来导入用户的个人资料数据,特别是从LinkedIn导入,而不管他们如何登录 作为获取LinkedIn配置文件的测试,我们成功地将LinkedIn中的访问令牌存储在ApplicationUser对象中,如下所示: public async Task<ActionResult>

我们希望允许登录到MVC Razor网站,使用OAuth提供商的常见分类:

e、 g

  • 谷歌/谷歌+
  • Microsoft帐户
  • 脸谱网
  • LinkedIn
这些功能本身都可以很好地工作,但是我们需要有额外的选项来导入用户的个人资料数据,特别是从LinkedIn导入,而不管他们如何登录

作为获取LinkedIn配置文件的测试,我们成功地将
LinkedIn
中的访问令牌存储在
ApplicationUser
对象中,如下所示:

    public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
    {
        if (User.Identity.IsAuthenticated)
        {
            return RedirectToAction("Manage");
        }

        if (ModelState.IsValid)
        {
            // Get the information about the user from the external login provider
            var info = await AuthenticationManager.GetExternalLoginInfoAsync();
            if (info == null)
            {
                return View("ExternalLoginFailure");
            }

            var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

            //check claims here
            if (info.Login.LoginProvider.ToLower()=="linkedin")
            {
                var claim = info.ExternalIdentity.Claims.First(p => p.Type == "urn:linkedin:accesstoken");
                if (claim != null)
                {
                    user.OAuthAccessToken = claim.Value;
                }
            }

            IdentityResult result = await UserManager.CreateAsync(user);
当然,这只有在他们使用LinkedIn登录时才有效

我们真正想要的是通过OAuth登录,比如说Google,然后让用户选择性地登录到他们的LinkedIn帐户,以获取访问令牌并获取配置文件数据


OWIN是否支持创建不更改当前登录名的附加OAuth登录名?最新的Razor模板提供了太多的框架代码,我不知道最好的方法是什么。

您能分享一下这个问题的解决方案吗。我也面临同样的问题。@Illep:看起来我们有没有收到过解决方案?我们将该功能停驻以备将来调查。抱歉:(因为这个问题是在2014年发布的,我觉得你现在可能已经找到了答案。@Illep:Nah…非常长的项目。本周刚刚发布第一个版本进行测试。
 var usertoken = UserManager.FindById(User.Identity.GetUserId()).OAuthAccessToken;