验证Domino REST服务请求

时间:2015-02-18 12:30:55

标签: lotus-domino

我已经安装了" Domino示例REST服务功能"来自901v00_11.20141217-1000 version of XPages Extension Library。 OpenNtfSample服务(com.ibm.domino.services.sample.service.SampleService)通常可以正常工作,唯一的问题是它完全忽略了服务器的身份验证设置。

我已经尝试了Authenticating Domino REST Service Requests中描述的基本和会话身份验证,我得到的结果如下 - 服务始终返回数据,不会要求任何用户名和密码。

服务器现在配置了会话身份验证,当我尝试访问时,我会收到密码提示

{} my_server的/ API /数据

但是在我打开时没有得到它

{} my_server的/ API /样品

我添加了此网站规则

描述:DAS服务    规则类型:覆盖会话身份验证    传入网址格式: / api /

服务器更改了

的密码提示

{} my_server的/ API /数据

但是

{} my_server的/ API /样品

仍然开放。

有没有人遇到过这种错误?任何人都可以帮我密码保护这个示例服务,以便我可以根据这个例子开始自己开发一次吗?

1 个答案:

答案 0 :(得分:0)

/ api / sample 资源是故意开放的。这只会返回指向联系人资源的链接 - /xpagesext.nsf/api/sample/contacts

如果您确实希望阻止匿名访问 / api / sample 资源,则有两种可能的解决方案:1)禁用所有HTTP请求的匿名访问,或者2)更改RootResource类。第一个解决方案是服务器配置更改。我相信你可以在其他地方找到相关的细节。由于这是StackOverflow,我将重点关注第二个解决方案。

正如您已经注意到的那样,我们不允许匿名访问 / api / data 资源。您可以通过对RootResource.getLinks()的简单更改来模仿 / api / sample 资源中的行为。在方法的顶部附近,只需添加以下代码行:

        boolean authenticated = false;
        Session session = ContextInfo.getUserSession();
        if ( session != null ) {
            String userName = session.getEffectiveUserName();
            if ( userName != null && !userName.equals("Anonymous")) {
                authenticated = true;
            }
        }

        if ( !authenticated ) {
            throw new NoAccessSignal("Need user context");
        }

顺便说一句,您不需要对联系人资源类(ContactsListResource.java)进行相同的更改。由于联系人资源URL包含数据库名称(xpagesext.nsf),因此Web服务器将在将请求转发给REST服务之前尝试打开数据库。您可以通过更改xpagesext.nsf的ACL来阻止对联系人资源的匿名访问。只需确保默认访问权限是"无权访问"。