如何通过oauth唯一标识用户登录?

时间:2014-01-15 18:35:08

标签: 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 (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登录时 - >我可以让他的常规帐户引用fk_accounts_id。

但是当谈到oauth - AFAIK时,没有像oauth_identity_string这样的东西......而且因为oauth令牌本身可能会改变令牌,所以不能在我的应用程序中用作配置文件的唯一链接.....那么应该怎样我做?如何唯一标识通过oauth登录的用户?

2 个答案:

答案 0 :(得分:2)

您无法通过OAuth协议本身获取有关用户的信息,但是,通常会有一个端点,您可以向其发出请求,提供用户信息。例如,Google提供了一个:在您收到令牌后,您可以发出请求:

  

获取https://www.googleapis.com/plus/v1/people/me?access_token= {TOKEN}

这将返回一个JSON对象,其中包含有关用户的信息,包括唯一标识符。

答案 1 :(得分:0)

使用apis获取account_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,

服务可以是googletwitter