我正在为 ServiceStack 编写一个 AuthProvider 来对我们自己的 OAuth2 服务器进行身份验证,并且在 ServiceStack 与我的提供者交互的方式上遇到了问题。
根据https://groups.google.com/d/msg/servicestack/e3kkh-qRDYs/DF9Y05ibl-MJ
通常有 2 种扩展方式,如果您想提供自己的 OAuth 实现,您可以继承 AuthProvider(或实现 IAuthProvider)并覆盖包含整个服务实现的 Authenticate() 方法。AuthService 现在没有自己的真正实现,它只是检查 Auth Provider .IsAuthorized() 方法以查看用户是否已经过身份验证,如果没有,则调用 Authenticate() 方法。[我的重点]
我的整个身份验证提供程序现在看起来像这样:
using System;
using ServiceStack.ServiceInterface;
using ServiceStack.ServiceInterface.Auth;
namespace SpotAuth.ResourceServer.Services {
public class SpotlightOAUthProvider : AuthProvider {
public override bool IsAuthorized(IAuthSession session, IOAuthTokens tokens, Auth request = null) {
return (false);
}
public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request) {
// A breakpoint on this line is never reached; the service just returns Unauthorized.
throw new NotImplementedException();
}
}
}
为什么永远不会调用 Authenticate 方法?上面链接的论坛帖子已有近一年的历史,但我找不到任何暗示这种行为已被弃用的东西。