Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于采埃孚Oauth的问题;官方";数据库模式_Php_Mysql_Oauth 2.0_Zend Framework2_Laminas Api Tools - Fatal编程技术网

Php 关于采埃孚Oauth的问题;官方";数据库模式

Php 关于采埃孚Oauth的问题;官方";数据库模式,php,mysql,oauth-2.0,zend-framework2,laminas-api-tools,Php,Mysql,Oauth 2.0,Zend Framework2,Laminas Api Tools,关于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(20

关于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)
);
您可以在以下网址找到:

因此,这个模式看起来真的很“标准”,因为Zend Technologies(Zend framework和apigility)采用了它,但我有一些问题:

  • 为什么没有任何“普通”主键?(int自动递增字段)
    我想使用
    oauth_用户
    表注册帐户,表单字段为“email”和“password”。我可以将电子邮件存储到
    oauth_users.username
    字段中,但将此字段用作外键似乎不是一个好主意。最后,我的url在
    配置文件url/[:id]
    中比
    配置文件url/[:username/]
    中看起来更好。所以,我必须创建一个自定义主键,否则我可能会遇到问题

  • 为什么没有外键?这个问题与第一个问题有关。我必须添加外键,否则我可能会遇到问题?使用
    oauth_users.username
    作为我的其他表的外键,这似乎不是一个好主意


  • 正如您在composer json require列表中所看到的,ZF-Oauth2构建在其之上,您可以找到原始文档。它对OAuth2的工作有一些很好的解释。它也是@Adam所指的同一个存储库

    您可以在一定程度上定制这些OAuth模块(比如使用您自己的表名)。为此,您可以使用自己的逻辑引入自定义的
    OAuthAdapter
    。还有其他模块可以完全做到这一点,例如,用于将OAuth2与条令2结合使用的模块

    该图附带以下数据库关系图
    (来源:):

    1)部分原因是通过一个查询支持主要数据库(这里是apigility解决此问题所使用的对包的合并请求)。例如,使用auto increment,您将失去PostgreSQL。