关于ZF-Oauth"官方"的问题数据库架构

时间:2016-01-24 15:05:04

标签: php mysql oauth-2.0 zend-framework2 apigility

我有几个关于zf-oauth(Apigility)和php-oauth服务器数据库架构的问题。

数据库架构是:

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)
);

您可以在以下网址找到它:

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

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

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

所以,这个架构看起来真的很"标准"因为被Zend Technologies采用(zend框架和apigility),但我有一些问题:

  1. 为什么没有"普通"主键? (int auto increment field)。
    我会将oauth_users表用于注册帐户,表单的字段为" email"和#34;密码"。我可以将电子邮件存储到oauth_users.username字段中,但将此字段用作外键似乎不太好。最后,我的网址在profile-url/[:id]profile-url/[:username/]看起来更好(在我的情况下是电子邮件)。那么,我必须创建一个自定义主键,否则我可能会遇到问题?

  2. 为什么没有外键?这个问题与第一个问题有关。我必须添加外键或者我可以反对问题?使用oauth_users.username作为我的其他表的外键,这似乎不是一个好主意。

1 个答案:

答案 0 :(得分:2)

正如您在作曲家json中看到的,列表ZF-Oauth2建立在bshaffer/oauth2-server-php之上,您可以找到原始文档here。它对OAuth2的工作有一些很好的解释。它也是@Adam所指的相同的存储库。

您绝对可以在一定范围内自定义这些OAuth模块(例如使用您自己的表名)。为此,您可以使用自己的逻辑引入自定义OAuthAdapter。还有其他可用的模块就是这样做的,例如{0}用于将OAuth2与Doctrine 2一起使用。

那个附带以下数据库图
(来源:this zf-oauth2-doctrine module):

https://github.com/API-Skeletons/zf-oauth2-doctrine