如何唯一标识通过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

我不明白如何将使用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 (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你能提供一个提供者和标识符的具体列表吗?不,我不能。你必须浏览开发人员文档,找到你感兴趣的每一个提供者(甚至没有“使用最广泛”的提供者列表)并通过阅读和理解他们的文档来找出答案。