2016-01-24 60 views
1

我有幾個關於zf-oauth(Apigility)和php-oauth服務器數據庫模式的問題。關於ZF-Oauth「官方」數據庫模式的問題

數據庫模式是:

https://github.com/zfcampus/zf-oauth2

https://bshaffer.github.io/oauth2-server-php-docs/

https://apigility.org/documentation/modules/zf-oauth2

所以,這個模式似乎真的「站:

CREATE TABLE oauth_clients (
    client_id VARCHAR(80) NOT NULL, 
    client_secret VARCHAR(80) NOT NULL, 
    redirect_uri VARCHAR(2000) NOT NULL, 
    grant_types VARCHAR(80), 
    scope VARCHAR(2000), 
    user_id VARCHAR(255), 
    CONSTRAINT clients_client_id_pk PRIMARY KEY (client_id) 
); 
CREATE TABLE oauth_access_tokens (
    access_token VARCHAR(40) NOT NULL, 
    client_id VARCHAR(80) NOT NULL, 
    user_id VARCHAR(255), 
    expires TIMESTAMP NOT NULL, 
    scope VARCHAR(2000), 
    CONSTRAINT access_token_pk PRIMARY KEY (access_token) 
); 
CREATE TABLE oauth_authorization_codes (
    authorization_code VARCHAR(40) NOT NULL, 
    client_id VARCHAR(80) NOT NULL, 
    user_id VARCHAR(255), 
    redirect_uri VARCHAR(2000), 
    expires TIMESTAMP NOT NULL, 
    scope VARCHAR(2000), 
    id_token VARCHAR(2000), 
    CONSTRAINT auth_code_pk PRIMARY KEY (authorization_code) 
); 
CREATE TABLE oauth_refresh_tokens (
    refresh_token VARCHAR(40) NOT NULL, 
    client_id VARCHAR(80) NOT NULL, 
    user_id VARCHAR(255), 
    expires TIMESTAMP NOT NULL, 
    scope VARCHAR(2000), 
    CONSTRAINT refresh_token_pk PRIMARY KEY (refresh_token) 
); 
CREATE TABLE oauth_users (
    username VARCHAR(255) NOT NULL, 
    password VARCHAR(2000), 
    first_name VARCHAR(255), 
    last_name VARCHAR(255), 
    CONSTRAINT username_pk PRIMARY KEY (username) 
); 
CREATE TABLE oauth_scopes (
    type VARCHAR(255) NOT NULL DEFAULT "supported", 
    scope VARCHAR(2000), 
    client_id VARCHAR (80), 
    is_default SMALLINT DEFAULT NULL 
); 
CREATE TABLE oauth_jwt (
    client_id VARCHAR(80) NOT NULL, 
    subject VARCHAR(80), 
    public_key VARCHAR(2000), 
    CONSTRAINT jwt_client_id_pk PRIMARY KEY (client_id) 
); 

你可以找到它ARD」因爲被Zend Technologies公司(Zend框架和apigility)通過,但我有一些問題:

  1. 爲什麼沒有任何的‘普通’的主鍵? (int自動增量字段)。
    我會使用oauth_users表註冊帳戶和表單的字段是「電子郵件」和「密碼」。我可以將電子郵件存儲到oauth_users.username字段中,但將此字段用作外鍵似乎不是一個好主意。最後,我的網址在profile-url/[:id]profile-url/[:username/](我的情況是電子郵件)好看。那麼,我必須創建一個自定義主鍵還是可以解決問題?

  2. 爲什麼沒有外鍵?這個問題與第一個有關。我必須添加外鍵或者我可以反對問題?使用oauth_users.username作爲我的其他表的外鍵,這似乎不是一個好主意。

+1

1)部分原因是用一個查詢來支持主要數據庫(這裏是對apigility使用的包的合併請求,它解決了這個問題https://github.com/bshaffer/oauth2-server-php/pull/149) 。以自動增量爲例,你會失去PostgreSQL。 – Adam

回答

2

正如你可以在作曲JSON看到要求列表ZF-Oauth2是建立在bshaffer/oauth2-server-php頂部,你可以找到原來的文檔here。它對OAuth2的工作有一些很好的解釋。它也是@Adam所指的同一個存儲庫。

您可以肯定地定製這些OAuth模塊到一定的範圍(如使用您自己的表名稱)。要做到這一點,您可以使用自己的邏輯引入自定義OAuthAdapter。也有做到這些,如例如this zf-oauth2-doctrine module被使用的OAuth2與學說2.

那一個來與以下數據庫圖表
提供其它模塊(來源:https://github.com/API-Skeletons/zf-oauth2-doctrine):

enter image description here