ruby-on-rails – 分布式系统的身份验证和授权
我正在研究分布式系统的架构,基本上是在
ruby(rails,sinatra等)中.
我有几个纯API组件,比如API_C1,API_C2,API_C3.它有几个Web客户端应用程序,比如Portal1,Portal2和一些本机客户端应用程序,比如Native1. 要求: >所有Web客户端(Portal1,Portal2)的SSO,集中身份验证. 我做了几个POC尝试一些选项,但仍然没有完整的图片. 我为SSO尝试了rubycas服务器.它工作得很好.如果需要,我考虑使用java cas实现. 集中的API授权对我来说相当棘手.我倾向于采用OAuth2的方式,但有一些问题: >是否可以让集中式OAuth提供程序为所有API组件提供服务?它应该如何工作以及使用什么库/宝石? >用户登录Portal1(通过CAS服务器)并打开一些页面 我有一些想法,比如在相同的SSO CAS会话下使用API??组件.这有点允许我的场景4)解决,没有在这里编码.但是使用API??会话是一种不好的做法,然后如何混合API的会话和OAuth授权? 拜托,指出正确的方向.可能还有一些其他选项可以执行自定义的OpenId或OAuth提供程序以支持SSO吗? 解决方法
虽然这是一个老问题(2年前),但是我会在这里留下答案,以防有人试图解决类似的问题.
我认为你正在考虑使用OAUTH,正在采取正确的方向,但是我建议你使用version 2.0 of the OAUTH protocol 集中授权
> OAUTH 2.0通过让授权服务作为独立系统/服务运行来实现此方案,系统中的其他服务可以信任该服务并知道如何验证其颁发的令牌(通过使用其x.509证书公开)关键例如) 网络客户端
>使用resource owner password grant,用户(资源所有者)使用用户名& ;;对客户端(网站/门户/应用程序)进行身份验证.密码以及已知的client_id(也可以绑定到已知的HTTP源) 原生应用
>在OAuth 2.0中,在此方案中使用client credentials grant,可以存储client_id& client_secret并将它们发送到授权服务器以作为可信客户端进行身份验证(无需用户凭据) 将它们混合在一起
> OAuth 2.0的所有上述授权类型可以在同一个授权服务/服务器上协同工作(据我所知.我实际上已经使用Microsoft OWIN for ASP.net)
>授权服务具有客户端用于发布表单或重定向以获取access_token的端点(URL),但实际方法取决于您使用的是哪种身份验证流程(post vs redirect)
>使用resource owner password grant,用户输入用户名&密码进入portal1,然后获取access_token,然后当portal1调用API_C1时,它只需将access_token附加到调用(HTTP Header:Authorization)(模拟登录用户) 类似主题 最后,查看与您的问题相关的similar answer (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |