我们希望允许使用通常的各种OAuth提供商登录MVC Razor网站:
e.g。
这些都可以自行完成,但我们需要额外选择导入用户的个人资料数据,特别是来自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模板提供了很多框架代码,我不确定最好的方法。