我使用ServiceStack实现了一项Web服务,并且在授权方面遇到了麻烦。
我们的身份验证系统提供每个组织"用户拥有的权限列表,每个请求DTO都有一个强制性的" OrganizationId"请求所属的财产。只有当用户拥有该特定组织的相应权限时,才能满足该请求。
ServiceStack中的授权回调(IsAuthorized,HasRole,HasPermission等)似乎不允许访问请求DTO,这意味着我无法拔出OrganizationId进行身份验证。该服务是独立运行的,因此我无法通过HttpContext,HostContext等访问请求DTO。
我可以使用全局请求过滤器来实现我自己的auth层,但显然更愿意重新使用已经存在的内容,如果可能的话。有没有什么方法可以可靠,安全地访问请求DTO而无需重新发明ServiceStack已经提供的功能轮?
我看过的另一种方法是实现一个全局请求过滤器,以便将请求DTO添加到"项目"请求上下文的属性,然后我可以从auth回调例程访问它。它不是最优雅的方法,感觉有点脏,但如果它完成了工作,我会咬紧牙关并实施它。我希望有更好的方法。
答案 0 :(得分:0)
您可以从IRequest.Dto
属性获取当前的请求DTO,但不会在UserSession HasRole()/HasPermission()
API中注入。
用户会话应设置该用户所需的必要信息,因此理想情况下,组织ID将添加为自定义UserSession属性。但是,如果您有其他要求检查每个请求DTO,则需要在Global Request Filter或Filter Attribute中添加自己的自定义逻辑。