加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 分布式系统的身份验证和授权

发布时间:2020-12-17 02:04:17 所属栏目:百科 来源:网络整理
导读:我正在研究分布式系统的架构,基本上是在 ruby(rails,sinatra等)中. 我有几个纯API组件,比如API_C1,API_C2,API_C3.它有几个Web客户端应用程序,比如Portal1,Portal2和一些本机客户端应用程序,比如Native1. 要求: 所有Web客户端(Portal1,Portal2)的SSO,集中身
我正在研究分布式系统的架构,基本上是在 ruby(rails,sinatra等)中.

我有几个纯API组件,比如API_C1,API_C2,API_C3.它有几个Web客户端应用程序,比如Portal1,Portal2和一些本机客户端应用程序,比如Native1.

要求:

>所有Web客户端(Portal1,Portal2)的SSO,集中身份验证.
>所有API组件都应该通过授权公开其API.
>集中式API授权.

我做了几个POC尝试一些选项,但仍然没有完整的图片.

我为SSO尝试了rubycas服务器.它工作得很好.如果需要,我考虑使用java cas实现.

集中的API授权对我来说相当棘手.我倾向于采用OAuth2的方式,但有一些问题:

>是否可以让集中式OAuth提供程序为所有API组件提供服务?它应该如何工作以及使用什么库/宝石?
>默认情况下,如何使我的Web应用程序(Portal1和Portal2)受信任.我不希望用户授权访问受信任的应用程序.
>对于本机客户端应用程序(非Web环境),我想支持2条OAuth.这是正确的选择吗?是否可以同时使用3条腿和2条腿?
>如何将用户信用转换为oauth令牌?假设以下用例:

>用户登录Portal1(通过CAS服务器)并打开一些页面
> Portal1后端服务器应从API_C1和API_C2中提取数据以显示页面.如何在这里授权API?

我有一些想法,比如在相同的SSO CAS会话下使用API??组件.这有点允许我的场景4)解决,没有在这里编码.但是使用API??会话是一种不好的做法,然后如何混合API的会话和OAuth授权?

拜托,指出正确的方向.可能还有一些其他选项可以执行自定义的OpenId或OAuth提供程序以支持SSO吗?

解决方法

虽然这是一个老问题(2年前),但是我会在这里留下答案,以防有人试图解决类似的问题.

我认为你正在考虑使用OAUTH,正在采取正确的方向,但是我建议你使用version 2.0 of the OAUTH protocol

集中授权

Is it possible to have centralized OAuth provider serving all API components? How it should work then and what libs/gems to use?

> OAUTH 2.0通过让授权服务作为独立系统/服务运行来实现此方案,系统中的其他服务可以信任该服务并知道如何验证其颁发的令牌(通过使用其x.509证书公开)关键例如)
>有基于SaaS的授权服务器,您甚至可以使用它而无需任何设置成本,例如Auth0

网络客户端

How can I make my web apps (Portal1 and Portal2) trusted by default. I don’t want a user to authorize access for trusted applications.

>使用resource owner password grant,用户(资源所有者)使用用户名&amp ;;对客户端(网站/门户/应用程序)进行身份验证.密码以及已知的client_id(也可以绑定到已知的HTTP源)
>或者,authorization code grant,其中门户将用户重定向到已知的授权服务URL,其中包含一些URL参数,供用户在那里进行身份验证并重定向回门户

原生应用

For native client apps (non web environment) I want to support 2 legs OAuth. Is it correct choice?

>在OAuth 2.0中,在此方案中使用client credentials grant,可以存储client_id& client_secret并将它们发送到授权服务器以作为可信客户端进行身份验证(无需用户凭据)

将它们混合在一起

Is it possible to have both 3 legs and 2 legs working?

> OAuth 2.0的所有上述授权类型可以在同一个授权服务/服务器上协同工作(据我所知.我实际上已经使用Microsoft OWIN for ASP.net)

How user creds are transformed into oauth token? Suppose the following use case:

>授权服务具有客户端用于发布表单或重定向以获取access_token的端点(URL),但实际方法取决于您使用的是哪种身份验证流程(post vs redirect)

user logs in into Portal1 (via CAS server) and opens some page
Portal1 backend server should pull data from API_C1 and API_C2 to show the page. How to authorize API here?

>使用resource owner password grant,用户输入用户名&密码进入portal1,然后获取access_token,然后当portal1调用API_C1时,它只需将access_token附加到调用(HTTP Header:Authorization)(模拟登录用户)
>使用authorization code grant,用户被重定向到Auth服务,在那里输入他们的凭证,然后使用access_token重定向回portal1(客户端),然后将其附加到API_C1的调用以模拟登录用户

类似主题

最后,查看与您的问题相关的similar answer

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读