2014-01-15 9 views
5

I particular - Ich verstehe nicht, wie Benutzer, die authentifiziert mit oauth zu einem bestimmten Konto in meiner Anwendung verknüpfen?Wie identifiziere ich Benutzer, die sich über OAUTH anmelden?

hier ist also Konten in meiner 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; 

Mit OpenID zum Beispiel gibt es eine einzigartige Benutzer-ID (uri, xri), die diesen Benutzer eindeutig identifiziert. So kann ich einen Link nur auf meine Konten wie folgt aus:

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 
); 

So Jedes Mal, wenn Benutzer in über openid anmeldet -> ich seinen regulären Konto bekommen kann Referenzierung fk_accounts_id.

Aber wenn es um oauth - AFAIK geht, gibt es keine Dinge wie oauth_identity_string ... Und da oauth Token Tokens selbst ändern können, kann nicht als eindeutiger Link zum Profil in meiner Anwendung verwendet werden ..... Na und soll ich tun? Wie identifiziere ich einen Benutzer, der sich über oauth anmeldet?

+0

Nicht alle Anbieter teilen sich die gleiche Idee verwenden von dem, was die Benutzerkennung ist, da dieses Kennungskonzept nicht von OAuthxx definiert ist. Zum Beispiel ist es für Twitter eine Nummer (es gibt keine E-Mail). Für die meisten anderen ist die E-Mail die Kennung, aber es gibt keine eindeutige Regel. –

+0

@SimonMourier Können Sie eine konkrete Liste der Anbieter und Bezeichner bereitstellen? – mareoraft

+0

Nein, ich kann nicht.Sie ​​müssen Entwicklerdokumentation für jeden der Provider, die Sie interessiert sind durchsuchen (es gibt nicht einmal eine solche Liste der "am häufigsten verwendeten" Anbieter) und durch Lesen und Verstehen ihre Dokumente –

Antwort

2

Sie können keine Informationen über den Benutzer über das OAuth-Protokoll selbst abrufen. Es gibt jedoch normalerweise einen Endpunkt, an den Sie eine Anforderung senden können, die Benutzerinformationen bereitstellt. Zum Beispiel bietet Google ein: Nachdem Sie Ihr Token erhalten, können Sie eine Anfrage an:

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

Dies wird eine JSON-Objekt mit Informationen über den Benutzer zurückgeben, darunter eine eindeutige Kennung.

0

Holen Sie sich das account_id APIS mit und speichern sie in folgendem Format:

-- -------------------------------------------------------- 

-- 
-- 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; 

Service kann ein google sein, twitter, etc, wenn Sie mehrere oauth

Verwandte Themen