6

我正在为 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 方法?上面链接的论坛帖子已有近一年的历史,但我找不到任何暗示这种行为已被弃用的东西。

4

1 回答 1

1

这个答案可能来得有点晚,但我现在偶然发现了你的问题。

在您提出问题的几周前,我尝试实现自己AuthProvider的问题并遇到了类似的问题:
如何让 ServiceStack 身份验证正常工作?(与 iPhone 客户端)
(靠近问题的底部,有我的MyBasicAuthProvider

最后我发现我做错了什么,我认为你犯了和我一样的错误:
我需要覆盖TryAuthenticate而不是Authenticate.

一旦我改变了它,我的提供者就开始工作了。

于 2015-06-10T15:25:53.130 回答