UAA是否要求登录服务器具有范围uaa.user?

时间:2013-03-20 22:16:19

标签: cloudfoundry

我有一个部署,我正在运行UAA示例应用程序以及Java登录服务器。我已经分别使用自定义uaa.yml和login.yml配置了我的UAA和登录服务器。我通过查看/uaa/uaa/src/main/webapp/WEB-INF/spring/oauth-clients.xml的内容,根据“登录”客户端的详细信息填充了uaa.yml,如下所示:

    <entry key="login">
    <map>
        <entry key="id" value="login" />
        <entry key="secret" value="loginsecret" />
        <entry key="scope" value="openid,uaa.user" />
        <entry key="authorized-grant-types" value="client_credentials,authorization_code" />
        <entry key="authorities" value="oauth.login" />
        <entry key="autoapprove" value="true" />
    </map>
</entry>

在我的uaa.yml中相应地配置了它。这似乎工作正常,我可以登录并浏览示例应用程序。

但是,当我随后访问示例应用程序中的/ approvals页面时,我在approvals.jsp中出现了一个javascript错误,这显然是由于messages.properties文件中scope.uaa.user没有任何相应条目造成的

[2013-03-20 18:05:52.787] login/login-server - ???? [http-8080-1] .... DEBUG --- DispatcherServlet: Could not complete request
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'scope.uaa.user' for locale 'en_US'.
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)  
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    ...

所以,问题是 - 登录服务器真的需要范围“uaa.user”吗?如果是这样,messages.properties文件中的条目应该说什么?我找不到任何为uaa.user范围提供商定文本描述的地方。

作为一种解决方法,我只是在messages.properties中为该范围编写了我自己的文本,现在批准页面呈现正常。

谢谢, 约翰

2 个答案:

答案 0 :(得分:0)

是的,登录服务器需要“uaa.user”。您可以在messages.properties文件中包含任何文本字符串,您将相应地在应用程序中使用该文件。 如果有帮助,请告诉我。

谢谢,

  • 亚太区首席技术官Matt

答案 1 :(得分:0)

登录服务器无法预测哪些范围可用,因为某些范围可能是应用程序的自定义范围。这个bug已经修复了 https://github.com/cloudfoundry/login-server/commit/c39aa19db33c12a0d9740e2c0a53698b87889ebc 如果没有可用于表示范围的消息,则只需打印范围的名称。