Sina Weibo Open Platform은 다양한 언어로 개발 SDK 다운로드를 제공하지만 각각 기본 인터페이스 통화를위한 일부 데모 및 인터페이스 설명 문서가 제공됩니다. 그러나 요즘 참을성있게 시도한 후, Sina Weibo의 오픈 플랫폼에 대한 소개 지침은 다운로드 된 Java 개발 패키지 Weibo4J 패키지의 데모 사용 주석과 다소 일치하지 않는다고 생각합니다. 또한, 내 자신의 이해 능력은 제한되어있어 많은 눈에 띄지 않는 문제가 발생합니다. 다행히도 나는 그것을 이해하려고 노력하지 않았다. 덜 말도 안되는 것은 다음이 내 학습 과정입니다.
Sina Weibo Open Platform API에 전화하여 자신의 Weibo 애플리케이션을 개발하려면 첫 번째 단계는 Sina Weibo 계정과 CSDN 계정을 갖추는 것입니다.이 두 계정을 사용하여 동시에 Weibo 응용 프로그램을 만들기 위해 앱 키 및 비밀 키를 얻는 것이 필요하기 때문입니다. 그렇다면 App Key 및 Secret Key의 사용은 무엇입니까?
사실, 나는 Sina Weibo의 열린 플랫폼에서 일련의 설명을 읽었지만 앱 키와 비밀 키가 어떻게 유용한 지 이해하지 못했습니다. 더 중요한 것은 OAUTH 인증 및 승인의 전체 프로세스뿐만 아니라 전체 OAUTH 인증 및 승인 프로세스에서 여러 토큰 및 4 개의 URL의 역할을 이해하는 것입니다.
전혀 몰랐던 Oauth를 처음 만났을 때, 나는 계속 배우지 못할 것이라고 생각했습니다. 다행히도 나는 다음 기사를 발견했는데,이 기사는 Oauth를 이해하는 데 매우 도움이됩니다. 링크는 다음과 같습니다.
OAUTH에는 3 명의 참가자, 즉 사용자, 서비스 제공 업체 및 소비자가 있습니다. 다른 Sina Weibo 사용자가 사용할 수있는 Sina Weibo 오픈 플랫폼을 기반으로 응용 프로그램 (APP)을 개발하고 싶다고 가정 해 봅시다. 그들의 서신은 다음과 같습니다.
실제로, 당사의 앱은 사용자 및 제공 업체 (Sina Weibo 플랫폼)를위한 타사 응용 프로그램과 동일합니다. 타사 앱으로서 Sina Weibo 플랫폼에서 사용자가 저장 한 리소스에 액세스하려면 작동하기 전에 일련의 인증 및 승인을 받아야합니다.
다음은 전체 OAUTH 인증 및 권한 부여 프로세스에 대한 이해를 바탕으로 한 다이어그램입니다 (아래 개념 중 일부에 대한 확실한 이해가 있으면이 흐름도를 되돌아 볼 것입니다).
위의 흐름도를 결합하여 각 프로세스에 대한이 용어와 설명에 대한 이해가 있습니다.
소비자 키 및 소비자 비밀 : Sina Weibo의 오픈 플랫폼을 각각 App Key 및 Secret Key라고합니다. 소비자는 공급자에게 오픈 API를 호출 할 수 있습니다. 응용 프로그램이 승인 된 후 제공자는 요구 사항을 충족하는 소비자에게 할당되며, 이는 소비자가 공급자의 요구 사항을 충족한다는 것을 고유하게 식별하는 데 사용됩니다.
위 그림에서 흐름 1 및 2에 해당합니다.
요청 토큰, 요청 비밀 : 사용자가 소비자에 액세스하고 특수 서비스를 얻으려면 사용자 자체에 저장된 리소스를 통합 한 후 소비자가 서비스를 반환합니다. 이 시점에서 소비자는 제공자에게 요청 토큰을 얻도록 요청하며, 이는 소비자와 사용자 간의 특정 연관성을 고유하게 식별하는 데 사용됩니다.
위 그림에서 흐름 3, 4 및 5에 해당합니다.
6을 처리하려면 소비자는 사용자를 제공자가 제공 한 OAUTH 인증 및 권한 부여 페이지로 안내해야합니다. 실제로 브라우저는 요청 토큰 및 요청 비밀 매개 변수가 첨부 된 AuthenticationUrl로 리디렉션됩니다. 이 URL은 제공자가 제공합니다.
다음으로 프로세스 7 및 8에서 사용자는 소비자를 승인합니다 (일반적으로 계정 및 비밀번호를 입력하여 로그인) 공급자는 프로세스 1에서 소비자가 제공 한 Callback_url로 리디렉션하고 OAUTH 토큰 및 OAUTH VERIFIER를 URL 매개 변수에 첨부합니다.
프로세스 9는 공급자가 이전에 제공 한 요청 토큰을 통해 액세스 토큰을 얻기 위해 제공자에게 다시 요청하는 소비자 요청입니다.
Access Token, Access Secret : 공급자가 프로세스 10에서 사용자 승인없이 액세스 토큰을 반환하는 경우 특정 소비자의 제공 업체에 저장된 리소스 및 정보를 고유하게 식별하는 데 사용됩니다. 그런 다음 소비자는 얻은 액세스 토큰 및 액세스 비밀을 사용하여 해당 사용자가 제공자에게 저장된 리소스에 액세스 할 수 있습니다.
프로세스 11에서 사용자 정보를 통합하고 작동 한 후 특정 서비스 결과를 사용자에게 반환 할 수 있습니다.
OAUTH 프로세스에 대한 위의 이해를 통해 사용자는 계정, 비밀번호 등을 유출하지 않았다는 것을 알고 있습니다. 동시에 사용자는 소비자의 특수 서비스를 사용할 수 있습니다. 얼마나 영리하고 안전한 운영 과정입니다!
또한 위 그림에서 소비자는 제공자로부터 다른 요청을했습니다. 실제로 제공자는 소비자 액세스에 다른 기능을 갖춘 3 개의 URL을 제공합니다. Sina Weibo 오픈 플랫폼 에서이 3 개의 URL의 스크린 샷은 다음과 같습니다.
Sina Weibo Open Platform에 OAuth 확인 및 게시물을 사용하십시오.
Sina Weibo 오픈 플랫폼의 API를 사용하려면 먼저 Sina가 할당 한 앱 키 및 앱 비밀을 얻어야합니다. 다음은 응용 프로그램을 만든 후 Sina가 할당 한 앱 키 및 앱 비밀입니다 (이것은 기밀로 유지해야 함).
그런 다음 Weibo SDK를 다운로드하면 Java에서 Weibo4J를 사용합니다.
SDK 패키지의 weibo.java 클래스의 앱 키 및 앱 비밀을 수정하십시오.
이를 완료 한 후 제공된 데모를 기반으로 코드를 작성할 수 있습니다. 다음과 같이 :
weboauth.java는 weibo.java 클래스에 필요한 앱 키 및 앱 비밀을 초기화하는 데 사용되며 getRequestToken () 및 getTaccessToken ()을 제공하여 요청 테이크 및 액세스 토큰을 얻는 방법을 제공합니다. 필요한 매개 변수는 코드에 표시됩니다. 또한 텍스트 Weibo를 게시하는 메소드도 update ()에 제공됩니다.
패키지 weibo4j.examples; weibo4j.status 가져 오기; weibo4j.weibo 가져 오기; weibo4j.weiboException 가져 오기; import weibo4j.http.accesstoken; import weibo4j.http.requesttoken; java.io.unsupportedencodingException 가져 오기; // 웹 인증 공개 클래스 Weboauth {Private Weibo Weibo; public weboauth () {// 소비자 키 및 소비자 비밀 준비 // Sina Weibo 응용 프로그램에 해당하는 응용 프로그램은 키 및 비밀 키 시스템에 적용한 앱입니다. System.SetProperty ( "weibo4j.oauth.consumersecret", weibo.consumer_secret); weibo = 새로운 weibo (); } // 들어오는 Callback_URL Public Requestoken getRequestToken (String Backurl)에 따라 요청 토큰 공개 요청을 받는다 {try {// 콜백_URL을 지정하고 요청 token requestToken = weibo.getoauthrequestToken (backurl); System.out.println ( "요청 토큰 :" + requestToken.getToken ()); System.out.println ( "Token Request Token Secret :" + requestToken.getTokenSecret ()); 반품 요청 송금; } catch (예외 e) {System.out.println ( "요청 토큰을 얻을 때 예외가 발생했습니다!"); e.printstacktrace (); 널 리턴; }} // 들어오는 요청 토큰 및 검증 자 AccessToken getTaccessToken (requestToken requestToken, String Verifier)을 기반으로 액세스 토큰 공개 얻기 {try {accesstoken = weibo.getoauthaccesstoken (requestToken .getToken (), requestToken.getTokenSecret (), VERIFIER); System.out.println ( "Access Token :" + accessToken.getToken ()); System.out.println ( "Access Token Secret :" + accessToken.getTokenSecret ()); Return AccessToken; } catch (예외 e) {System.out.println ( "액세스 토큰을 얻을 때 예외가 발생했습니다!"); e.printstacktrace (); 널 리턴; }} // 들어오는 액세스 토큰 및 콘텐츠 공개 void 업데이트 (AccessToken Access, String Content) {try {weibo.settoken (access.getToken (), access.getTokenSecret ())를 기반으로 Weibo를 게시합니다. content = new String (content.getBytes ( "gbk"), "utf-8"); 상태 상태 = weibo.updatestatus (내용); System.out.println ( "Weibo에 성공적으로 게시 :" + status.getText () + "); } catch (UnsupportedEncodingException e) {System.out.println ( "Weibo 컨텐츠가 인코딩으로 변환 될 때 예외가 발생했습니다!"); e.printstacktrace (); } catch (weiboException e) {System.out.println ( "예외는 예외를 게시 할 때 예외가 발생했습니다!"); e.printstacktrace (); }}} request.jsp는 callback_url을 제공하는 데 사용됩니다 (여기서 우리는 다음에서 callback.jsp로 사용자 정의). requestToken을 얻은 후 요청 테이크를 세션에 저장하고 확인 및 인증을 위해 페이지를 Callback.jsp로 리디렉션하십시오. < %@ page contenttype = "text/html; charset = utf-8" %> < %@ page language = "java"import = "weibo4j.*" %> < %@ page language = "java"import = "wibo4j.http.*" %> < %@ page language = "java" id = "weboauth"scope = "session"/> <% if ( "1".equals (request.getParameter ( "opt"))) {// callback_url 문자열 콜백_url = "http : // localhost : 8080/sinaweibo/callback.jsp"; requestToken requestToken = woboauth.getRequestToken (Callback_url); if (requestToken! = null) {out.println (requestToken.getToken ()); out.println (requestToken.getTokenSecret ()); session.setattribute ( "requestToken", requestToken); String url = requestToken.getAuthorizationUrl ()+"& oauth_callback ="+Callback_url; System.out.println ( "AuthorizationUrl :" + url); //barebonesbrowserlaunch.openurl(callback_url); //response.sendRedirect (requestToken.getAuthorizationUrl ()); // Callback_Url 콜백 주소가 응답에 첨부 된 Sina Weibo 인증 페이지로 리디렉션됩니다. } else {out.println ( "요청 오류"); }} else { %> <a href = "request.jsp? opt = 1"> 웹 메소드에서 Oauth 인증을 클릭하십시오! </a> < %} %>
Callback.jsp. 이전 단계에서 리디렉션되면 OAUTH_VERIFIER 매개 변수가 콜백_URL에 연결됩니다. 현재 세션에 저장된 요청 테이크 및 획득 된 OAUTH_VERIFIER 매개 변수를 기반으로 AccessToken을 얻기 위해 신청합니다. AccessToken이 얻어지면 페이지를 Weibo를 쓴 페이지 인 WriteWeibo.html로 페이지를 리디렉션합니다.
<%@ page contenttype = "text /html; charset = utf-8"%> <%@ page language = "java"import = "weibo4j.http.*"%> <%@ page language = "java"import = "weibo4j. http 요청 문자열 verifier = request.getParameter ( "oauth_verifier"); out.println ( "oauth_verifier :"+verifier); System.out.println ( "Oauth_verifier :"+Verifier); if (verifier! = null) {requestToken requestToken = (requestToken) session.getAttribute ( "requestToken"); if (requestToken! = null) {AccessToken AccessToken = Woauth.getTaccessToken (requestToken, Verifier); if (accessToken! = null) {try {session.setAttribute ( "accessToken", accessToken); out.println ( "5 writeweibo.html로 이동"); Thread.sleep (5000); 응답 ( "http : // localhost : 8080/sinaweibo/writeweibo.html"); } catch (예외 e) {e.printstacktrace (); }} else {out.println ( "액세스 토큰 요청 오류"); }} else {out.println ( "요청 토큰 세션 오류"); }} else {out.println ( "Verifier String error"); } %> writeweibo.html, 매우 간단한 HTML 파일입니다. <html> <head> <title> 게시 된 Sina Weibo </title> </head> <body bgcolor = "#d0d0d0"> <form action = "updateweibo.jsp"method = "post"> </br> <textarea name = "weibotext"rows = "3"> test sina weibo! </textArea> </br> <input type = "value ="value = "publish"> <input type = "reset"value = "clear"> </br> weboauth.java에서 업데이트 방법을 호출하는 데 사용됩니다. <%@ page contenttype = "text /html; charset = utf-8"%> <%@ page language = "java"import = "weibo4j.http.*"%> <%@ page language = "java"import = "weibo4j. (AccessToken) 세션 .getAttribute ( "AccessToken"); 문자열 weibotext = (string) request.getParameter ( "weibotext"); // 동일한 weibo 컨텐츠의 지속적인 게시는 400 오류를 반환합니다. out.println ( "weibotext가 성공적으로 게시!"); %>
실행하기 전에 Tomcat을 준비하고 위의 소스 파일을 올바른 디렉토리에 넣어야합니다. 또한 /web-inf /lib 디렉토리의 SDK 패키지에 Commons-httpclient-3.1.jar 패키지를 추가해야합니다.
아래 그림과 같이 Tomcat을 실행하고 브라우저에서 request.jsp 페이지에 액세스하십시오.
아래 그림과 같이 링크를 클릭하십시오 (주소 표시 줄의 변경 사항 참고) :
주소 표시 줄의 URL은 다음과 같습니다.
http://api.t.sina.com.cn/oauth/authorize?oauth_token=efda6f2499877d0e6d814f8c3d31a1d1&oauth_callback=http://localhost:8080/sinaweibo/call.jsp
구체적이고 유효한 Sina Weibo 계정 및 비밀번호를 입력하고 승인하십시오. 다음은 테스트 및 승인을 위해 Weibo 계정을 채우는 결과입니다.
주소 표시 줄의 URL은 다음과 같습니다.
http : // localhost : 8080/sinaweibo/writeweibo.html
아래와 같이 "게시"를 클릭하십시오.
아래와 같이 Weibo에 로그인하십시오.
이 계정에서 승인 한 응용 프로그램 목록을 확인하십시오.
이 시점에서 Sina Weibo 오픈 플랫폼을 사용하여 Weibo를 게시하는 것은 Oauth 방법에 대한이 과정 일 것입니다.
요약:
1. 사실, 내가 언급하지 않은 세부 사항은 여전히 많습니다. 문제를 발견하고 문제를 이해 한 다음 문제를 해결하기 전에 여러 번 시도했습니다.
2. Sina Weibo 계정 정보에 로그인하기위한 쿠키가 브라우저에 저장된 경우, 승인 할 때 계정 정보를 입력 할 필요가 없습니다. 물론 현재 계정을 사용하지 않고 수정할 수도 있습니다.
3. 스크린 샷에 제공되지 않은 토큰, URL 및 서버 리턴 정보와 같은 콘솔에서 입력 한 정보도 있습니다.