服务端使用 Passport 认证 API 开发 App 该选择何种授权方式?

需求

服务端使用 Passport 进行 API 认证,而 Passport 是一个 OAuth2.0 server 的实现,那么,我仙子啊还要开发一个 APP , APP 上使用用户名和密码登录,通过 oauth 认证,应当选择何种授权方式?

可选授权方式

在 Passport 实现的 OAuth2.0 server 中有四种:

  • 密码授权令牌
  • 简化授权令牌
  • 客户端授权牌
  • 私人访问令牌

如何选择?

上面「可选授权方式」中提到了,除了「私人访问令牌」其他均需要跳转,简化令牌无需传递 client_secret 但是仍然需要跳转,而「私人访问令牌」需要自己写路由做用户登录后创建令牌。而「私人访问令牌」的定义是用户自己登录后选择颁发给自己私用,个人感觉不应该作为 APP 授权的方式,而「密码授权令牌」可满足需求,但是有一个重要点 client_idclient_secret 不应该提供给 OR 设备的,不可能在 APP 打包编译的时候将 client_secret 等安全敏感信息硬编码到 APP 当中吧?

感谢

OAuth2 概念了解了很多,如果作为授权给其他的,上述问题都不存在,问题就在于 我自己要用 Passport 做 API 接口认证,而自己还要开发 APP ,那问题就是我该选择何种方式?希望大家能解惑。

谢谢?。

Seven 的代码太渣,欢迎关注我的新拓展包 medz/cors 解决 PHP 项目程序设置跨域需求。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6
medz

@overtrue @Summer @JokerLinly 冒昧 at 请谅解,望解惑,谢谢。

6年前 评论

关于 client_idclient_secret,既然是你自己在开发的 APP,那么完全可以在服务端去拼 Password Grant 所需要的参数然后再走认证,APP 请求登录也就只需要用户名和密码。

6年前 评论
medz

@小恪守 意思是我需要自己写一个路由,然后接收 用户名和密码 然后请求「密码授权令牌」来获得访问令牌么?

6年前 评论

@medz 是这个意思,不一定要用 Passport 自带的路由,当然认证的逻辑是可以参考的

6年前 评论
Summer

没用过 Passport 的路过。

6年前 评论
Ryan

password 模式就可以,client_id和client_secret暴露了但是没有账号和密码照样是拿不到access_token

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!