Documentation

You are viewing the documentation for the 2.3.x release series. The latest stable release series is 2.4.x.

§OAuth

OAuth korunan bir veri yayınlamak ve bununla etkileşimde bulunmak için en basit yoldur. Ayrıca insanların size izin vermesi için en güvenli yoldur. Örnek olarak, Twitter’daki kullanıcılarınız verilerine erişmek için kullanılabilir.

OAuth’un birbirinden çok farklı 2 versiyonu vardır: OAuth 1.0 ve OAuth 2.0. Versiyon 2, kütüphane veya yardımcı desteği olmadan entegre edebilirsiniz, bu yüzden Play sadece OAuth 1.0 desteği sağlamaktadır.

§Kullanım

OAuth’u kullanmak için öncelikle build.sbt dosyanıza javaWs’yı eklemelisiniz:

libraryDependencies ++= Seq(
  javaWs
)

§Gerekli Bilgi

OAuth uygulamanızı servis sağlayıcıya kayıt ettirmeniz gerekmektedir. Sağladığınız geri çağırım bağlantınızı kontrol ettiğinizden emin olunuz, çünkü eşleşme olmaması durumunda servis sağlayıcı çağrılarınızı reddebilir. Yerel olarak çalışırken, /etc/hosts dosyasını, yerel makinanızda sahte alan adı açmak için kullanabilirsiniz.

Servis sağlayıcı size bunları verecektir:

§Kimlik Doğrulama Akışı

Akışın çoğu Play kütüphanesi tarafından yapılacaktır.

  1. Sunucudan istek jetonu alınız (sunucu-sunucu çağrılarında)
  2. Kullanıcıyı servis sağlayıcıya yönlendiriniz, burada kullanıcı kendi bilgilerini kullanmanız için izin verecektir.
  3. Servis sağlayıcı kullanıcıyı geri yönlendirip, size doğrulayıcı verecektir.
  4. Bu doğrulayıcı ile istek jetonunu erişim jetonu ile takas ediniz. (sunucu-sunucu çağrısı)

Şimdi erişim jetonu herhangi bir çağrıda, korunan veriye erişim için kullanılabilir.

§Örnek

conf/routes:

GET     /twitter/homeTimeline controllers.Twitter.homeTimeline()
GET     /twitter/auth         controllers.Twitter.auth()

controller:

import play.libs.F.Function;
import play.libs.F.Option;
import play.libs.F.Promise;
import play.libs.oauth.OAuth;
import play.libs.oauth.OAuth.ConsumerKey;
import play.libs.oauth.OAuth.OAuthCalculator;
import play.libs.oauth.OAuth.RequestToken;
import play.libs.oauth.OAuth.ServiceInfo;
import play.libs.ws.WS;
import play.libs.ws.WSResponse;
import play.mvc.Controller;
import play.mvc.Result;

import com.google.common.base.Strings;

public class Twitter extends Controller {
  static final ConsumerKey KEY = new ConsumerKey("...", "...");

  private static final ServiceInfo SERVICE_INFO = new ServiceInfo("https://api.twitter.com/oauth/request_token",
                                                                  "https://api.twitter.com/oauth/access_token",
                                                                  "https://api.twitter.com/oauth/authorize", 
                                                                  KEY);
  
  private static final OAuth TWITTER = new OAuth(SERVICE_INFO);
  
  public static Promise<Result> homeTimeline() {
    Option<RequestToken> sessionTokenPair = Twitter.getSessionTokenPair();
    if (sessionTokenPair.isDefined()) {
      return WS.url("https://api.twitter.com/1.1/statuses/home_timeline.json")
          .sign(new OAuthCalculator(Twitter.KEY, sessionTokenPair.get()))
          .get()
          .map(new Function<WSResponse, Result>(){
            @Override
            public Result apply(WSResponse result) throws Throwable {
              return ok(result.asJson());
            }
       });
    }
    return Promise.pure(redirect(routes.Twitter.auth()));
  }
  
  public static Result auth() {
    String verifier = request().getQueryString("oauth_verifier");
    if (Strings.isNullOrEmpty(verifier)) {
      String url = routes.Twitter.auth().absoluteURL(request());
      RequestToken requestToken = TWITTER.retrieveRequestToken(url);
      saveSessionTokenPair(requestToken);
      return redirect(TWITTER.redirectUrl(requestToken.token));
    } else {
      RequestToken requestToken = getSessionTokenPair().get();
      RequestToken accessToken = TWITTER.retrieveAccessToken(requestToken, verifier);
      saveSessionTokenPair(accessToken);
      return redirect(routes.Twitter.homeTimeline());
    }
  }

  private static void saveSessionTokenPair(RequestToken requestToken) {
    session("token", requestToken.token);
    session("secret", requestToken.secret);
  }

  private static Option<RequestToken> getSessionTokenPair() {
    if (session().containsKey("token")) {
      return Option.Some(new RequestToken(session("token"), session("secret")));
    }
    return Option.None();
  }
  
}

Sonraki: Akka ile Entegrasyon


Dokümantasyonun bu çevirisi Play ekibi tarafından yapılmamaktadır. Eğer bir hata bulduysanız, bu sayfanın kaynak kodu burada bulunmaktadır. Dokümantasyon yönergelerini okuduktan sonra lütfen katkı yapmaktan çekinmeyin.