2012-03-21 4 views
2

나는 OAuth를 둘러싼 문헌에 몰두하고 혼란 스럽다. OAuth 공급자 인 트위터에 연결하려고한다고 가정 해 보겠습니다. 그리고 우리는 mysite.com을 가지고 있으며, 다양한 사용자를 보유하고 있으며, 일부는 트위터 계정을 가지고 있습니다. 각 사용자에 대해 별도의 고객 키 및/또는 고객 기밀 정보가 필요합니까? 1 쌍이 있습니까?Oauth 소비자 토큰과 비밀은 사용자별로 구분되어 있습니까?

답변

4

소비자 키와 비밀 쌍은 응용 프로그램 고유의 각 응용 프로그램은 하나의 키/비밀 쌍 될 것입니다. 앱은 모바일 앱, 웹 사이트 또는 컴퓨터에 숨어있는 스크립트 일 수 있습니다. 예를 들어 트위터에는 Android 용 Twitter, iOS 용 Twitter 및 Mac 용 Twitter에 대한 다른 소비자 키/암호가 있습니다.

모든 사용자는 각 앱 (일명 소비자 키/비밀 쌍이라고도 함)을 인증해야하며 사용자가 특정 소비자 키를 승인했음을 고유하게 식별하는 액세스 토큰 및 비밀 쌍이 있어야합니다.

+0

명확히하기 위해 각 앱마다 하나의 소비자 키/비밀 정보를 가지며 앱의 _instance_가 아닌 것입니다. 예를 들어 Android 용 Twitter에는 키 쌍이 있지만 휴대 전화와 휴대 전화 앱 모두 동일한 키 쌍을 사용합니다. – iain

+0

안드로이드 설치를위한 모든 트위터는 동일한 키/비밀 쌍을 사용합니다. – abraham

1

예.

요청 토큰은 특정 사용자가 권한을 부여 할 때까지 소비자 (Mysite)와 만 연결됩니다.

액세스 토큰은 소비자 (Mysite)와 해당 사용자를 알고 있습니다. 소유하고있는 사람은 Mysite로 식별하고 해당 사용자를 대신하여 작업을 수행 할 수 있습니다. 여기


는 OAuth를-PHP는 그것을 구현하는 방법입니다 : http://code.google.com/p/oauth-php/source/browse/trunk/library/store/mysql/mysql.sql

# 
# ////////////////// SERVER SIDE ///////////////// 
# 

# Table holding consumer key/secret combos an user issued to consumers. 
# Used for verification of incoming requests. 

CREATE TABLE IF NOT EXISTS oauth_server_registry (
    osr_id      int(11) not null auto_increment, 
    osr_usa_id_ref    int(11), 
    osr_consumer_key   varchar(64) binary not null, 
    osr_consumer_secret   varchar(64) binary not null, 
    osr_enabled     tinyint(1) not null default '1', 
    osr_status     varchar(16) not null, 
    osr_requester_name   varchar(64) not null, 
    osr_requester_email   varchar(64) not null, 
    osr_callback_uri   varchar(255) not null, 
    osr_application_uri   varchar(255) not null, 
    osr_application_title  varchar(80) not null, 
    osr_application_descr  text not null, 
    osr_application_notes  text not null, 
    osr_application_type  varchar(20) not null, 
    osr_application_commercial tinyint(1) not null default '0', 
    osr_issue_date    datetime not null, 
    osr_timestamp    timestamp not null default current_timestamp, 

    primary key (osr_id), 
    unique key (osr_consumer_key), 
    key (osr_usa_id_ref) 

# , foreign key (osr_usa_id_ref) references any_user_auth(usa_id_ref) 
#  on update cascade 
#  on delete set null 
) engine=InnoDB default charset=utf8; 


CREATE TABLE IF NOT EXISTS oauth_server_token (
    ost_id     int(11) not null auto_increment, 
    ost_osr_id_ref   int(11) not null, 
    ost_usa_id_ref   int(11) not null, 
    ost_token    varchar(64) binary not null, 
    ost_token_secret  varchar(64) binary not null, 
    ost_token_type   enum('request','access'), 
    ost_authorized   tinyint(1) not null default '0', 
     ost_referrer_host  varchar(128) not null default '', 
     ost_token_ttl   datetime not null default '9999-12-31', 
    ost_timestamp   timestamp not null default current_timestamp, 
    ost_verifier   char(10), 
    ost_callback_url  varchar(512), 

     primary key (ost_id), 
    unique key (ost_token), 
    key (ost_osr_id_ref), 
     key (ost_token_ttl), 

     foreign key (ost_osr_id_ref) references oauth_server_registry (osr_id) 
     on update cascade 
     on delete cascade 

# , foreign key (ost_usa_id_ref) references any_user_auth (usa_id_ref) 
#  on update cascade 
#  on delete cascade   
) engine=InnoDB default charset=utf8; 
+0

그냥 명확히하십시오. 요청 토큰에 대해 묻지 않습니다. 나는 소비자의 열쇠와 비밀에 대해 묻고있다. – Zombies

+0

소비자 키와 비밀 **은 소비자를 식별합니다 **. 따라서 소비자 당 하나만 존재합니다. – aitchnyu

+0

@aitchnyu : 소비자 당 둘 이상이 될 수 있습니다. 의정서는 – zerkms

관련 문제