Laravel 5.5 仅内部应用API:Vue SPA认证方案选型困惑
针对内部Vue SPA的认证方案选型建议
嘿,我来帮你理清这两个方案的困惑,结合内部应用的场景给你一些实际的思路~
关于Passport在内部应用的适配
首先,你不用纠结那种需要client-secret和client-id的OAuth2模式,毕竟是内部应用,信任度高,完全可以用Passport的密码授权模式(Password Grant):
- 前端直接将用户的用户名和密码发送到后端的认证接口(记得全程用HTTPS加密传输)
- 后端用Passport的本地策略(Local Strategy)验证用户身份,通过后直接返回令牌(推荐用JWT格式)
- 这种模式下不需要维护
client-secret,因为内部应用本身就在信任范围内,再配合内网访问限制、IP白名单,安全性完全够用 - 另外,Passport也支持自定义权限范围(scopes):你可以在验证通过后,把用户的权限信息塞进返回的令牌里,后端接口校验时解析令牌就能判断用户是否有权限
解决JWT的短板问题
你提到的JWT没有scope和refresh token其实是个误区,这俩都可以手动实现:
- 权限范围(scopes):在JWT的payload里自定义
scopes字段就行,比如:
后端接口每次收到请求时,解析JWT后校验{ "sub": "user123", "scopes": ["read:dashboard", "write:config"], "exp": 1718923200 }scopes字段,判断用户是否有权限访问该接口 - 刷新令牌(refresh token):登录时同时返回两个令牌:
access_token:有效期短(比如15分钟),存在内存(比如Vuex)或者HttpOnly Cookie里refresh_token:有效期长(比如7天),必须存在HttpOnly、Secure的Cookie里(避免XSS窃取)
当access_token过期时,前端用refresh_token调用专门的刷新接口,后端验证refresh_token合法后返回新的access_token
- 另外,别把JWT存在
localStorage,HttpOnly Cookie或者内存存储能大幅降低XSS被盗的风险
综合选型建议
如果是纯内部应用,我更推荐Passport + JWT的组合:
- 用Passport处理用户身份验证的逻辑(比如和数据库的用户信息校验),减少重复造轮子
- 用JWT作为令牌格式,方便扩展scopes,配合refresh token机制解决有效期问题
- 额外加一些内部应用专属的安全措施:限制接口仅内网访问、启用HTTPS、前端后端同域名部署避免CORS问题
内容的提问来源于stack exchange,提问作者Alexxosipov
相关产品推荐
相关产品推荐

