如何唯一标识通过oauth登录的用户?
我不明白如何将使用oauth进行身份验证的用户链接到我的应用程序中的特定帐户 以下是我的申请中的账户:如何唯一标识通过oauth登录的用户?,oauth,oauth-2.0,openid,Oauth,Oauth 2.0,Openid,我不明白如何将使用oauth进行身份验证的用户链接到我的应用程序中的特定帐户 以下是我的申请中的账户: CREATE TABLE accounts ( id BIGINT NOT NULL AUTO_INCREMENT, username VARCHAR(40), email VARCHAR(256), created DATETIME, updated DATETIME, PRIMARY KEY (id), UNIQUE KEY (ema
CREATE TABLE accounts (
id BIGINT NOT NULL AUTO_INCREMENT,
username VARCHAR(40),
email VARCHAR(256),
created DATETIME,
updated DATETIME,
PRIMARY KEY (id),
UNIQUE KEY (email),
UNIQUE KEY (username)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
以openid为例,有一个唯一的用户id(uri,xri),它唯一地标识该用户。因此,我可以像这样链接到我的帐户:
CREATE TABLE openid_logins (
id BIGINT NOT NULL auto_increment,
fk_accounts_id BIGINT NOT NULL,
openid_identity TEXT NOT NULL, /*that's unique user id*/
openid_provider_url VARCHAR(255) NOT NULL, /*flickr, yahoo, live_journal*/
PRIMARY KEY (id),
INDEX (openid_identity),
FOREIGN KEY (fk_accounts_id) REFERENCES accounts(id) ON UPDATE CASCADE ON DELETE CASCADE
);
因此,每当用户通过openid->I登录时,我都可以获得他引用fk_accounts_id的常规帐户
但是当谈到oauth-AFAIK时,没有oauth\u identity\u string之类的东西。。。而且,由于oauth令牌可能会自行更改,因此令牌不能用作my Application中配置文件的唯一链接。。。。。那我该怎么办?如何唯一标识通过oauth登录的用户 您无法通过OAuth协议本身获取有关用户的信息,但是,通常有一个端点,您可以向其发出请求,该端点提供用户信息。例如,Google提供了一个:在您收到您的令牌后,您可以请求: 获取{TOKEN}
这将返回一个JSON对象,其中包含有关用户的信息,包括唯一标识符。使用API获取
帐户id
,并以以下格式存储:
-- --------------------------------------------------------
--
-- Table structure for table oauth -- its like a username passwd thingy
--
CREATE TABLE IF NOT EXISTS oauth (
oauth_id bigint unsigned NOT NULL AUTO_INCREMENT UNIQUE,
service varchar(16) NOT NULL,
account_id varchar(256) NOT NULL,
token text NOT NULL,
token_secret text NOT NULL,
PRIMARY KEY (service, account_id)
) ENGINE=InnoDB DEFAULT CHARSET=ascii COLLATE=ascii_bin;
如果您使用多个oauth,则服务可以是
google
,twitter
,等等。由于OAuthxx未定义此标识符概念,因此并非所有提供商都有相同的用户标识符概念。例如,对于twitter,它是一个数字(没有电子邮件)。对于大多数其他人来说,电子邮件是标识符,但没有明确的规则。@SimonMourier你能提供一个提供者和标识符的具体列表吗?不,我不能。你必须浏览开发人员文档,找到你感兴趣的每一个提供者(甚至没有“使用最广泛”的提供者列表)并通过阅读和理解他们的文档来找出答案。