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

Dan*_*boy 6 openid oauth oauth-2.0

我特别 - 我不明白如何将使用oauth进行身份验证的用户链接到我的应用程序中的特定帐户?

所以这是我的applciation中的帐户:

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;
Run Code Online (Sandbox Code Playgroud)

例如,使用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
);
Run Code Online (Sandbox Code Playgroud)

因此,每当用户通过openid登录时 - >我可以让他的常规帐户引用fk_accounts_id.

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

小智 4

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

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

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