gpt4 book ai didi

servicestack - 在 ServiceStack 中使用自定义身份验证提供程序的 ArgumentNullException

转载 作者:行者123 更新时间:2023-12-04 10:22:39 26 4
gpt4 key购买 nike

我已经基于 CredentialsAuthProvider 为 LDAP(Active Directory)创建了一个自定义身份验证提供程序。按照文档,我覆盖了 TryAuthenticate 和 OnAuthenticated,最后返回 true。我也试过没有 OnAuthenticated。

我正在使用 UseDistinctRoleTables对于 OrmLiteAuthRepository,我在表中观察到在 UserRole 中创建角色。

但是我得到了异常:ArgumentNullException。字段名“s”。

"stackTrace": "[Authenticate: 20/03/2020 16:46:30]:
[REQUEST: {provider:Credentials,userName:xxxx,password:yyyy}]
System.ArgumentNullException: Value cannot be null.
Parameter name: s
at lambda_method(Closure , Object , List`1 )
at ServiceStack.OrmLite.SqlExpression`1.EvaluateExpression(Expression m) in C:\\BuildAgent\\work\\27e4cc16641be8c0\\src\\ServiceStack.OrmLite\\Expressions\\SqlExpression.cs:line 2374
at ServiceStack.OrmLite.SqlExpression`1.VisitBinary(BinaryExpression b) in C:\\BuildAgent\\work\\27e4cc16641be8c0\\src\\ServiceStack.OrmLite\\Expressions\\SqlExpression.cs:line 1658
at ServiceStack.OrmLite.SqlExpression`1.VisitBinary(BinaryExpression b) in C:\\BuildAgent\\work\\27e4cc16641be8c0\\src\\ServiceStack.OrmLite\\Expressions\\SqlExpression.cs:line 1622
at ServiceStack.OrmLite.SqlExpression`1.VisitLambda(LambdaExpression lambda) in C:\\BuildAgent\\work\\27e4cc16641be8c0\\src\\ServiceStack.OrmLite\\Expressions\\SqlExpression.cs:line 1589
at ServiceStack.OrmLite.SqlExpression`1.AppendToWhere(String condition, Expression predicate) in C:\\BuildAgent\\work\\27e4cc16641be8c0\\src\\ServiceStack.OrmLite\\Expressions\\SqlExpression.cs:line 555
at ServiceStack.OrmLite.ReadExpressionCommandExtensions.Select[T](IDbCommand dbCmd, Expression`1 predicate) in C:\\BuildAgent\\work\\27e4cc16641be8c0\\src\\ServiceStack.OrmLite\\Expressions\\ReadExpressionCommandExtensions.cs:line 22
at ServiceStack.OrmLite.OrmLiteExecFilter.Exec[T](IDbConnection dbConn, Func`2 filter) in C:\\BuildAgent\\work\\27e4cc16641be8c0\\src\\ServiceStack.OrmLite\\OrmLiteExecFilter.cs:line 64
at ServiceStack.Auth.OrmLiteAuthRepositoryBase`2.<>c__DisplayClass33_0.<GetRoles>b__0(IDbConnection db) in C:\\BuildAgent\\work\\3481147c480f4a2f\\src\\ServiceStack.Server\\Auth\\OrmLiteAuthRepository.cs:line 571
at ServiceStack.Auth.OrmLiteAuthRepository`2.Exec[T](Func`2 fn) in C:\\BuildAgent\\work\\3481147c480f4a2f\\src\\ServiceStack.Server\\Auth\\OrmLiteAuthRepository.cs:line 51
at ServiceStack.Auth.AuthenticateService.Post(Authenticate request) in C:\\BuildAgent\\work\\3481147c480f4a2f\\src\\ServiceStack\\Auth\\AuthenticateService.cs:line 231
at ServiceStack.Host.ServiceRunner`1.ExecuteAsync(IRequest req, Object instance, TRequest requestDto) in C:\\BuildAgent\\work\\3481147c480f4a2f\\src\\ServiceStack\\Host\\ServiceRunner.cs:line 133",

我已经剥离了我的代码。在 Startup.cs 中:
Plugins.Add(new AuthFeature( () => new AuthUserSession(),
new IAuthProvider[] {
new LdapCredentialsAuthProvider(AppSettings),

最佳答案

问题是 ServiceStack 的 AuthenticateService正在尝试填充 AuthenticateResponse角色和权限,但您的自定义 AuthProvider 未填充 session.UserAuthId用于查询角色的身份验证存储库。

解决方案是让您的自定义 AuthProvider 填充 session UserAuthId带有经过身份验证的用户的 ID。

您还可以通过设置 IncludeRolesInAuthenticateResponse=false 禁用 ServiceStack 尝试填充角色/权限来防止此异常。 ,例如:

Plugins.Add(new AuthFeature( () => new AuthUserSession(),
new IAuthProvider[] {
new LdapCredentialsAuthProvider(AppSettings),
},
"/login.html"
) {
IncludeRolesInAuthenticateResponse = false,
});

在下 ServiceStack v5.8.1 now on MyGet如果 UserAuthId,它不会尝试检索角色。未填充,但您的自定义 AuthProvider 仍应使用经过身份验证的用户的唯一 ID 填充它。

关于servicestack - 在 ServiceStack 中使用自定义身份验证提供程序的 ArgumentNullException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60778444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com