ServiceStack - 使用内置身份验证功能时访问请求DTO?

时间:2016-12-12 05:32:39

标签: c# authentication servicestack

我使用ServiceStack实现了一项Web服务,并且在授权方面遇到了麻烦。

我们的身份验证系统提供每个组织"用户拥有的权限列表,每个请求DTO都有一个强制性的" OrganizationId"请求所属的财产。只有当用户拥有该特定组织的相应权限时,才能满足该请求。

ServiceStack中的授权回调(IsAuthorized,HasRole,HasPermission等)似乎不允许访问请求DTO,这意味着我无法拔出OrganizationId进行身份验证。该服务是独立运行的,因此我无法通过HttpContext,HostContext等访问请求DTO。

我可以使用全局请求过滤器来实现我自己的auth层,但显然更愿意重新使用已经存在的内容,如果可能的话。有没有什么方法可以可靠,安全地访问请求DTO而无需重新发明ServiceStack已经提供的功能轮?

我看过的另一种方法是实现一个全局请求过滤器,以便将请求DTO添加到"项目"请求上下文的属性,然后我可以从auth回调例程访问它。它不是最优雅的方法,感觉有点脏,但如果它完成了工作,我会咬紧牙关并实施它。我希望有更好的方法。

1 个答案:

答案 0 :(得分:0)

您可以从IRequest.Dto属性获取当前的请求DTO,但不会在UserSession HasRole()/HasPermission() API中注入。

用户会话应设置该用户所需的必要信息,因此理想情况下,组织ID将添加为自定义UserSession属性。但是,如果您有其他要求检查每个请求DTO,则需要在Global Request FilterFilter Attribute中添加自己的自定义逻辑。