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

时间:2014-07-30 14:25:25

标签: c# razor oauth linkedin owin

我们希望允许使用通常的各种OAuth提供商登录MVC Razor网站:

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);

稍后用以下方式获取该令牌:

 var usertoken = UserManager.FindById(User.Identity.GetUserId()).OAuthAccessToken;

但当然,这只有在他们与LinkedIn签约时才有效。

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

OWIN是否支持进行不会更改当前登录的其他OAuth登录 ?最新的Razor模板提供了很多框架代码,我不确定最好的方法。

0 个答案:

没有答案