我试图全面了解OWIN和自定义的外部登录。更具体地说,我尝试开发外部登录服务,例如Google或Facebook。这是我的知识下降的地方。
我知道在实现中通常有4个类,即Extension,Handler,Middleware和Options。我可以处理的扩展和中间件类。在Option类中,我不确定要在此处输入什么?我知道它包含中间件的配置,但是通常需要什么配置?也许是回调路径和身份验证模式?
在我所拥有的指南中,处理程序类包含3种不同的方法:AuthenticateCoreAsync,ApplyResponseChallenge和InvokeAsync。 3的作用是什么,我将如何使用它们?
AuthenticateCoreAsync返回一个AuthenticationTicket,它带有一个标识和属性。我是从外部提供商那里获得的身份吗?什么是属性? 该方法如下:
var identity = new ClaimsIdentity(Options.SignInAsAuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, Options.UserId, null, Options.AuthenticationType));
identity.AddClaim(new Claim(ClaimTypes.Name, Options.UserName));
var properties = Options.StateDataFormat.Unprotect(Request.Query["state"]);
return Task.FromResult(new AuthenticationTicket(identity, properties));
下一个方法ApplyResponseChallenge看起来像:
if (Response.StatusCode == 401)
{
var challenge = Helper.LookupChallenge(Options.AuthenticationType, Options.AuthenticationMode);
// Only react to 401 if there is an authentication challenge for the authentication
// type of this handler.
if (challenge != null)
{
var state = challenge.Properties;
if (string.IsNullOrEmpty(state.RedirectUri))
{
state.RedirectUri = Request.Uri.ToString();
}
var stateString = Options.StateDataFormat.Protect(state);
Response.Redirect(WebUtilities.AddQueryString(Options.CallbackPath.Value, "state", stateString));
}
}
return Task.FromResult<object>(null);
世界上有什么挑战,如何使用这种方法? 最后一种方法InvokeAsync如下:
if (Options.CallbackPath.HasValue && Options.CallbackPath == Request.Path)
{
var ticket = await AuthenticateAsync();
if (ticket != null)
{
Context.Authentication.SignIn(ticket.Properties, ticket.Identity);
Response.Redirect(ticket.Properties.RedirectUri);
// Prevent further processing by the owin pipeline.
return true;
}
}
// Let the rest of the pipeline run.
return false;
再说一次,它的目的是什么,以及signIn对提供的身份和属性有什么作用?
出现的另一个问题是称为AuthenticationResponseGrant的问题。在OWIN中是什么?
我知道有很多问题,而且我确实试图理解代码的原理以及总体上的工作流程。
我希望任何有丰富知识的人都愿意花时间为我的问题写一个深入的答案。我真的很想了解。
预先,谢谢。 免责声明:我已经阅读了数十篇文章,但是我似乎无法理解。