我一直在调查一个 CF 部署方案,其中我有一个现有的身份验证基础结构,我需要配置 UAA 以将登录委托给现有的 SSO 权限。作为第一步,我决定使用 login.rb 示例服务器,只是为了让事情顺利进行。
我已经使用示例 login.rb 和在 localhost 上运行的示例应用程序以及在另一台主机上运行的 UAA 实例设置了我的环境。从应用程序到 localhost:3000 的登录页面的重定向工作正常,查看我的日志我可以看到当 login.rb 示例发布到 UAA 时(直通)身份验证成功,此外收到对授权的帖子的响应也给出了 200 OK....我可以看到正在返回带有所需提示字符串的 JSON。但是,erb 确认对话框出现问题。我在 login.rb 的第 124 行遇到异常
NoMethodError - undefined method `[]' for nil:NilClass:
/home/fieldj1/Documents/workspace-sts-3.1.0.RELEASE/uaa/samples/login/login.rb:124:in `block in <class:LoginApplication>'
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb:1212:in `call'
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb:1212:in `block in compile!'
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb:785:in `[]'
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb:785:in `block (3 levels) in route!'
/var/lib/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb:801:in `route_eval'
...
问题似乎是解析来自 UAA 的 JSON OAUTH 响应的代码已过时。我通过更改第 124 行来修复它:
erb :confirm, :locals => {:client_id => confirmation_info["authorizationRequest" ["clientId"], \
:scopes => confirmation_info["authorizationRequest"]["scope"]}
对此:
erb :confirm, :locals => {:client_id => confirmation_info["auth_request"]["authorizationParameters"]["client_id"], \
:scopes => confirmation_info["auth_request"]["authorizationParameters"]["scope"]}
有没有其他人看过这个?我相当确定我正在运行的代码应该是自洽的,因为我对整个 UAA 进行了 git 克隆。不确定我的环境是否不一致,或者我是否发现了真正的问题。
谢谢,约翰