我正在尝试将ABP用于Windows身份验证而不是基于表的身份验证。
计划是建立框架:
我没有在文档中看到有关这种Windows集成方法的任何内容。
如果有人以前这样做了,我会感激任何提示。
我认为我最好的选择是使用基于策略的授权。所以当控制器当前使用ABP auth属性时,我将恢复到正常的ASP.NET属性。
e.g。 [Authorize(Policy = "MyAppAdmin")]
答案 0 :(得分:2)
要通过官方AspNet Boilerplate API登录用户(有角色和其他内容),您可以使用外部身份验证。这正是你要找的东西;
https://aspnetboilerplate.com/Pages/Documents/Zero/User-Management#external-authentication
答案 1 :(得分:1)
我试图按照约翰的建议去做,但是我必须做一些改动,所以这就是我的做法。
“ angular \ src \ account \ login \ login.component.ts”
class LoginComponent {
ngOnInit() {
this.loginService.authenticateModel.userNameOrEmailAddress = 'foo';
this.loginService.authenticateModel.password = 'bar';
this.login();
}
}
“ aspnet-core \ src \ ProjectName.Core \ Authentication \ AlwaysTrue \ AlwaysTrueExternalAuthSource.cs”
public class AlwaysTrueExternalAuthSource: DefaultExternalAuthenticationSource<Tenant, User>, ITransientDependency
{
public override string Name => "AlwaysTrueExternalAuthSource";
public override Task<bool> TryAuthenticateAsync(string userNameOrEmailAddress, string plainPassword, Tenant tenant)
{
return Task.FromResult(true);
}
}
“ aspnet-core \ src \ ProjectName.Core \ ProjectNameCoreModule.cs”
public class ProjectNameCoreModule : AbpModule
{
public override void PreInitialize()
{
Configuration.Modules.Zero().UserManagement.ExternalAuthenticationSources.Add<AlwaysTrueExternalAuthSource>();
}
}
“ aspnet-core \ src \ ProjectName.Web.Core \ Controllers \ TokenAuthController.cs”
public class TokenAuthController : ProjectNameControllerBase
{
[HttpPost]
public async Task<AuthenticateResultModel> Authenticate([FromBody] AuthenticateModel model)
{
var windowsIdentity = WindowsIdentity.GetCurrent();
model.UserNameOrEmailAddress = windowsIdentity.Name.ToLowerInvariant().Replace("\\","");
var loginResult = await GetLoginResultAsync(...)
}
}
答案 2 :(得分:0)
本着分享的精神,我设法绕过了Window Authenticated上下文的登录界面。
立即运行登录操作(无用户交互)
abp.ajax({
contentType: 'application/x-www-form-urlencoded',
url: $loginForm.attr('action'),
data: $loginForm.serialize()
});
在AccountController中:
var windowsIdentity = WindowsIdentity.GetCurrent();
loginModel.UsernameOrEmailAddress = windowsIdentity.Name;
var count =(来自windowsIdentity.Claims中的x,其中x.Value ==“myclaim”选择x).Count();
if (count == 0)
{
throw _abpLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(AbpLoginResultType.InvalidUserNameOrEmailAddress, loginModel.UsernameOrEmailAddress, null);
}
按照上面的答案中的说明创建一个ExternalAuthSource。我们将始终返回true
,因为已经完成了真正的身份验证。
public override Task<bool> TryAuthenticateAsync(string userNameOrEmailAddress, string plainPassword, Tenant tenant)
{
return Task.FromResult(true);
}
它具有额外的优势,即经过身份验证的用户是由Apb框架自动创建的。新用户的角色取决于Default
所属的角色 - 请参阅表AbpUserRoles
希望这有助于某人尝试在Windows身份验证的上下文中使用该框架。