我有2个app:
1 APP - 主应用程序(CMR) 2 APP - 网站
主要目的是使用OAuth2从1个APP连接到2个APP;
1个APP实现了FOSOAuthServerBundle,但不存在任何一个oauth2客户端。
问题是我无法生成oauth2客户端,因为用户只知道用户名/密码凭据。
用户首先提交登录表单 - 然后以某种方式我需要从用户凭据生成令牌。
我可以安全地生成具有相同ID和&的oauth2客户端吗?秘密作为用户名/密码?
答案 0 :(得分:1)
用户不需要知道client_id和client_secret。实际上除了APP 2之外,其他任何人都不知道它们是否安全。客户端凭证(client_id,client_secret)是在auth服务器中生成的。然后APP 2开发人员获取此客户端凭据并将其存储在只有APP 2可以访问它们的地方(例如app 2配置文件或app 2 db)。完成此操作后,当用户想要登录时,他只提供用户名和密码,app 2将它们包含在对auth服务器的令牌API的API调用中,并使用授权类型'密码'和想要的范围。
但这只是划伤了auth2的表面。如果您向网络添加第三个应用程序,并且希望A2和A3使用A1生成的令牌安全地进行通信,那么您将需要A1中的内省API,甚至使用签名的JWT openId。
长话短说,FOSOAuthServerBundle是一个良好的开端,但从长远来看,你需要付出很多努力。以下是一些指导您的材料。
Auth2 rfc:https://tools.ietf.org/html/rfc6749
令牌内省rfc:https://tools.ietf.org/search/rfc7662
签署JWT:https://jwt.io
另请参阅openId,RBAC,ACL。这在某些方面也会派上用场。