研究 Taiseer Joudeh 的实现
the /ExternalLogin端点取代OWIN 身份验证挑战.
The AngularJS LoginController
拨打电话authService.obtainAccessToken当在身份提供程序中未找到外部身份验证的用户时:
if (fragment.haslocalaccount == 'False') {
...
}
else {
//Obtain access token and redirect to orders
var externalData = { provider: fragment.provider,
externalAccessToken: fragment.external_access_token };
authService.obtainAccessToken(externalData).then(function (response) {
$location.path('/orders');
它使用验证外部访问令牌执行反向查找Google and Facebook用于获取不记名令牌的声明信息的 API。
if (provider == "Facebook")
{
var appToken = "xxxxxx";
verifyTokenEndPoint = string.Format("https://graph.facebook.com/debug_token?input_token={0}&access_token={1}", accessToken, appToken);
}
else if (provider == "Google")
{
verifyTokenEndPoint = string.Format("https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={0}", accessToken);
}
else
{
return null;
}
如果找到 token,则返回一个新的 tokenASP.NET不记名令牌
var accessTokenResponse = GenerateLocalAccessTokenResponse(user.UserName);
return Ok(accessTokenResponse);
With [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
the OWIN中间件使用外部不记名令牌访问第 3 方的 Cookie 并注册新帐户(或查找现有帐户)。
OWIN中间件无法配置为接受外部不记名令牌而不是地方当局令牌。外部不记名代币仅用于身份验证和注册。