2016-01-24 55 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