关于 ZF-Oauth "official" 数据库模式的问题
Questions about ZF-Oauth "official" database schema
我有几个关于 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
所以,这个模式看起来确实 "standard" 因为被 Zend Technologies 采用(zend 框架和 apigility),但我有一些问题:
为什么 "ordinary" 没有主键? (int 自动增量字段)。
我会使用 oauth_users
table 作为注册帐户,表格的字段是 "email" 和 "password"。我可以将电子邮件存储到 oauth_users.username
字段中,但将此字段用作外键似乎不是一个好主意。最后,我的 url 在 profile-url/[:id]
中看起来比 profile-url/[:username/]
(在我的例子中是电子邮件)更好。所以,我必须创建一个自定义主键,否则我可能会遇到问题?
为什么没有外键?这个问题与第一个有关。我必须添加外键,否则我可能会遇到问题?使用 oauth_users.username
作为我其他 table 的外键,这似乎不是一个好主意。
正如您在 composer json 中看到的那样,要求列表 ZF-Oauth2
构建在 bshaffer/oauth2-server-php
for which you can find the original documentation here 之上。它对 OAuth2 的工作有一些很好的解释。它也是@Adam 所指的同一个存储库。
您绝对可以在一定程度上自定义这些 OAuth 模块(比如使用您自己的 table 名称)。为此,您可以使用自己的逻辑引入自定义 OAuthAdapter
。还有其他模块可以做到这一点,例如 this zf-oauth2-doctrine
module 是为将 OAuth2 与 Doctrine 2 一起使用而制作的。
那个带有以下数据库图表
(来源:https://github.com/API-Skeletons/zf-oauth2-doctrine):
我有几个关于 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
所以,这个模式看起来确实 "standard" 因为被 Zend Technologies 采用(zend 框架和 apigility),但我有一些问题:
为什么 "ordinary" 没有主键? (int 自动增量字段)。
我会使用oauth_users
table 作为注册帐户,表格的字段是 "email" 和 "password"。我可以将电子邮件存储到oauth_users.username
字段中,但将此字段用作外键似乎不是一个好主意。最后,我的 url 在profile-url/[:id]
中看起来比profile-url/[:username/]
(在我的例子中是电子邮件)更好。所以,我必须创建一个自定义主键,否则我可能会遇到问题?为什么没有外键?这个问题与第一个有关。我必须添加外键,否则我可能会遇到问题?使用
oauth_users.username
作为我其他 table 的外键,这似乎不是一个好主意。
正如您在 composer json 中看到的那样,要求列表 ZF-Oauth2
构建在 bshaffer/oauth2-server-php
for which you can find the original documentation here 之上。它对 OAuth2 的工作有一些很好的解释。它也是@Adam 所指的同一个存储库。
您绝对可以在一定程度上自定义这些 OAuth 模块(比如使用您自己的 table 名称)。为此,您可以使用自己的逻辑引入自定义 OAuthAdapter
。还有其他模块可以做到这一点,例如 this zf-oauth2-doctrine
module 是为将 OAuth2 与 Doctrine 2 一起使用而制作的。
那个带有以下数据库图表
(来源:https://github.com/API-Skeletons/zf-oauth2-doctrine):