Facebook身份验证访问主体
我有一个带有自定义身份验证方案的.net核心web API。现在我正试图建立一个facebook登录并访问创建的索赔原则 以下代码适用于cookie:Facebook身份验证访问主体,facebook,authentication,cookies,asp.net-core-2.0,asp.net-core-middleware,Facebook,Authentication,Cookies,Asp.net Core 2.0,Asp.net Core Middleware,我有一个带有自定义身份验证方案的.net核心web API。现在我正试图建立一个facebook登录并访问创建的索赔原则 以下代码适用于cookie: services.AddAuthentication() .AddCookie() .AddFacebook(config => { // appid and secret set up here config.CallbackPath = "/externalLogin";
services.AddAuthentication()
.AddCookie()
.AddFacebook(config => {
// appid and secret set up here
config.CallbackPath = "/externalLogin";
config.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});
使用此代码,一旦我对操作使用了[Authorize(AuthenticationSchemes=FacebookDefaults.AuthenticationScheme)]
,它将使用cookies登录,我可以通过User.Identity
属性访问主体
我试图在通过登录方案将此主体设置到cookie之前获取它。我已尝试为此设置自定义方案:
services.AddAuthentication()
.AddScheme<ExternalOptions, ExternalLogin>(ExternalLogin.SchemeName, config => { })
.AddFacebook(config => {
// appid and secret set up here
config.CallbackPath = "/externalLogin";
config.SignInScheme = ExternalLogin.SchemeName;
});
services.AddAuthentication()
.AddScheme(ExternalLogin.SchemeName,config=>{})
.AddFacebook(配置=>{
//这里设置了appid和secret
config.CallbackPath=“/externalLogin”;
config.signnscheme=ExternalLogin.SchemeName;
});
我已经为scheme定义了空类:
public class ExternalOptions : AuthenticationSchemeOptions { }
public class ExternalLogin : AuthenticationHandler<ExternalOptions>
{
public const string SchemeName = "External";
public ExternalLogin(IOptionsMonitor<ExternalOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock)
: base(options, logger, encoder, clock)
{
}
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
// need to access the principal here
return AuthenticateResult.Fail("Failed!");
}
}
公共类外部选项:AuthenticationSchemeOptions{}
公共类外部登录:AuthenticationHandler
{
公共常量字符串SchemeName=“外部”;
公共外部登录(IOptionsMonitor选项、iLogger工厂记录器、URLCoder编码器、ISystemClock时钟)
:基本(选项、记录器、编码器、时钟)
{
}
受保护的重写异步任务handleAuthenticateAync()
{
//需要在这里访问委托人吗
返回AuthenticateResult.Fail(“Failed!”);
}
}
我尝试在return AuthenticateResult.Fail(“Failed!”)
上使用调试器,但找不到包含主体信息的属性
注意:我需要确保没有用于维护无状态的cookie,以防客户端的cookie被阻止(我想这会造成问题)。无论哪种方式,在Web API上启用Cookie都被认为是不好的。其次,其目的是建立一个外部身份验证,该身份验证可以在以后的外部登录(如谷歌和微软)中重复使用 可以通过scheme
选项在身份验证过程的各个点访问ClaimsPrincipal
。Events
(每个scheme定义自己的事件)
在这里,您可以使用cookies事件。例如:
服务
.AddAuthentication()
.AddCookie(选项=>
{
//有各种事件,请务必使用
//适合您的用例的
options.Events.OnValidatePrincipal=(上下文)=>
{
var-principal=context.principal;
//拒绝校长?
if(principal.Identity.Name!=“MyUser”)
context.RejectPrincipal();
//每个事件都需要一个任务
返回Task.CompletedTask;
};
)
.AddFacebook(配置=>{
//这里设置了appid和secret
config.CallbackPath=“/externalLogin”;
config.signnscheme=CookieAuthenticationDefaults.AuthenticationScheme;
});