2016-09-19 18 views
-1

我有2個應用程序:的Symfony 2的RESTful API的OAuth2

1 APP - 主應用程序(CMR) 2 APP - 網站

的主要目的是從使用的OAuth2 1個APP連接到2 APP;

1 APP實現FOSOAuthServerBundle,但不存在任何一個oauth2客戶端。

問題是我無法生成oauth2客戶端,因爲用戶只知道用戶名/密碼憑據。

在第一步用戶提交登錄表單 - 然後以某種方式我需要從用戶憑據生成令牌。

我可以安全地生成具有相同密碼的oauth2客戶端作爲用戶名/密碼的祕密嗎?

回答

1

用戶不需要知道client_id和client_secret。實際上,除APP 2之外,其他任何人都不知道它們是否安全。客戶端憑證(client_id,client_secret)是在auth服務器中生成的。然後,APP 2開發人員獲取此客戶端憑據,並將其存儲在只有APP 2有權訪問它們的位置(如應用程序2配置文件或應用程序2 db)。完成此操作後,當用戶想要登錄時,他只提供用戶名和密碼,應用程序2將它們封裝在對auth服務器的令牌API的API調用中,授權類型爲'password'和想要的作用域。

但是這只是刮擦auth2的表面。如果您將第三個應用程序添加到您的網絡中,並且您希望A2和A3使用由A1生成的令牌安全地進行通信,那麼您將需要A1中的introspect 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。這在某些時候也會派上用場。