现在要开放一部分数据给合作伙伴公司使用? 打算提供 rest 接口给他们访问,该如何设计授权呢?
|  |      1zoharSoul      2020-05-18 10:42:12 +08:00 懒得想就走标准的 oauth2 呗 | 
|  |      2tabris17      2020-05-18 10:44:10 +08:00 最简单的方式就是 nonce+签名 | 
|  |      3ISSSSSSS      2020-05-18 10:45:36 +08:00 ZFB 的接入流程就比较标准。可以参考下。主要是公私钥的生成,数据加验签。 | 
|      4linauror      2020-05-18 10:47:08 +08:00 如果不是做成标准化,那就直接约定一个密钥和签名方式就可以了 | 
|  |      9murmur      2020-05-18 10:51:13 +08:00 就 key 签名就可以,要求加入一个随机数 | 
|  |      10rioshikelong121      2020-05-18 10:51:44 +08:00 mark 有类似需求. 问下 oauth2 的 Client Credentials 的 grant type 可以做么? | 
|      11HansLee      2020-05-18 10:51:46 +08:00 如果是一个 server2server 的接口更推荐 OpenId | 
|      12ileeoyo OP @rioshikelong121 @zoharSoul  刚看了阮一峰大佬的文文章,感觉 client credentials 还挺符合我的业务场景。我当前业务没有前端,授权针对的是某个公司平台后台,而不是针对某个用户。 其他 3 中 oauth2 授权有:客户端和资源所有者的概念,需要资源所有者授权给某个第三方客户端。而我的场景没有资源所有者的概念,是第三方客户端直接获取授权得到数据 | 
|      14dilu      2020-05-18 11:17:36 +08:00 如果不打算做成标准化,IP 白名单+简单的 token 验签即可 标准化可以参考 oauth | 
|  |      15tabris17      2020-05-18 11:17:46 +08:00 @ileeoyo nonce 是参与签名计算的一次性的随机数。实际操作中,可以用 timestamp 来代替,不过调用者和被调用者之间需要校时,两者时间误差不能太大 | 
|  |      18chairuosen      2020-05-18 11:25:25 +08:00 不要用 ip 白名单,第三方一加机器就得找你开白名单 | 
|  |      19Guozi1989      2020-05-18 11:28:32 +08:00 简单点就 token+签名的方式吧 | 
|      20luozic      2020-05-18 11:53:46 +08:00 不要直接调,最好走一个网关或者代理,做一些限流 /监控 /白 or 黑名单控制。 | 
|      21teawithlife      2020-05-18 11:56:18 +08:00 @tabris17 #15 nonce 不能使用 timestamp,而应该和 timestamp 同时使用,两者结合可以用来防止重放攻击 单独使用 timestamp 的话,因为需要预留一定的容错时间,所以还是存在被重放攻击的风险,加上一个 nonce 就可以避免了 不过对于楼主这种简单需求,白名单应该是最稳妥简便的方式 | 
|  |      22tabris17      2020-05-18 12:21:17 +08:00 @teawithlife 实际操作中可以使用 timestamp,一般允许调用者和被调用者之间时差不超过 X 分钟,那么重放攻击的窗口期也就 X 分钟而已。安全性要求不高的场景下没有问题 | 
|      23dilu      2020-05-18 12:53:26 +08:00 @chairuosen 后台做个添加白名单的功能不就好了? | 
|      24hantsy      2020-05-18 13:04:42 +08:00 网络上大部分 Spring Oauth2 server 教程中 ClientID,Client Securets 是写死的。把这个开放出来,给 Client ( App )注册就行了。Client 的意思是 Application Client,就是要访问你的 API 的程序。剩下的就是定义好 Scopes,和允许的 Flow 了。 | 
|      25hantsy      2020-05-18 13:09:18 +08:00 @ileeoyo 你的所有暴露的 API 都是 resource owner 的,资源拥有者就是你自己(公司),通过 Scopes 来决定授权。 | 
|      26forgottencoast      2020-05-18 13:13:57 +08:00 这个很简单。 我每次都打开几大网站的 api 后台接口,看别人是怎么设计的。 Google 、Microsoft 、Facebook,这三个参考一下就能弄出来了。 他们设计的也很简单,反正前几年都是 oauth 。 | 
|  |      28tinycold      2020-05-18 13:18:51 +08:00 via Android 这玩意儿远远不是一个 OAuth2.0 能说清楚的,里边儿包含了很多行业标准,有个产品叫 Anth0,就是专门做这个,你可以搜一搜看看。 | 
|  |      29xuanbg      2020-05-18 13:35:56 +08:00 楼主的需求不是 OAuth2 的菜,应该加密+签名。 | 
|      30hantsy      2020-05-18 13:40:07 +08:00 @tinycold 现在就 Auth0, okta 两家做得比较大了,应用广泛,各种应用场景集成都是相应的 SDK 支持,开发也简单。 | 
|      31cbasil      2020-05-18 13:47:58 +08:00 简单一点就用签名咯,再复杂一点就 AES 加密,再复杂一点就 RSA 加密。接口对接用 oauth2 太麻烦了点,又不是对用户授权 | 
|      32yemoluo      2020-05-18 13:50:32 +08:00 @cbasil 还可以用 JWT,`sub` 表示 `client_id` 然后加密密钥用来表示 client_secret | 
|      33fgt      2020-05-18 14:30:05 +08:00 我这边的一个类似设计是:对方先调用我方 queryNonce 接口获取随机码 nonce (参数是对方的系统唯一 id ),然后它在本地计算 token=Md5(timestamp+nonce),然后将 timestamp 和 token 放在 header 中进行调用; 我方收到请求后先判断 timestamp 是否误差查过 5 分钟,然后拿本地存储的 nonce 进行同样的 Md5(timestamp+nonce)计算得到 localToken,然后根据 localToken 是否等于 token 来判断是否合法 | 
|  |      34seagull7558      2020-05-18 15:30:30 +08:00 推荐个 oauth2 框架,keycloak,应该是可以满足的你需求 | 
|      35fensou      2020-05-18 16:15:27 +08:00 via iPhone 一定要绑定硬件 key | 
|  |      36deco      2020-05-18 16:28:44 +08:00 可以去看看支付宝支付及微信支付的鉴权接口。 | 
|  |      37seagull7558      2020-05-18 17:17:08 +08:00 @hantsy 按照你的设计,使用 client_credentials 模式,传递 client_id 、client_secret 、scope 申请授权 假如说要像阿里云那样,企业下有多个子账号,每一个子账号都有自己的 ak,这种也要使用 client_credentials 吗 | 
|  |      38xcstream      2020-05-18 21:13:14 +08:00 参数打包+key 的 md5 就像微信支付一样 | 
|  |      39CoderGeek      2020-05-18 21:22:47 +08:00 oauth2 | 
|  |      40CoderGeek      2020-05-18 21:23:03 +08:00 | 
|  |      41BBCCBB      2020-05-18 21:24:13 +08:00 标准的都是 oauth2. | 
|  |      42rioshikelong121      2020-05-19 11:33:09 +08:00 我的需求和你类似 之前的想法是用 oauth 的客户端认证流来做.  参考了这篇文章以后: https://medium.com/swlh/3-ways-to-secure-your-web-api-for-different-situations-8d5cd4762ab3 我打算使用签名的方式来做. 理由: 给公司其他内部系统使用的,无需标准化. oauth 的成本会略高一些. | 
|      43daimubai      2022-01-24 16:50:24 +08:00 楼主,你最后是使用了 oauth2 的 client credentials 做的吗,有什么问题吗 |