§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:
- Application ID (Uygulama Kimliği)
- Secret key (Gizli Anahtar)
- Request Token URL (İstek Jetonu Bağlantısı)
- Access Token URL (Erişim Jetonu Bağlantısı)
- Authorize URL (Yetkilendirme Bağlantısı)
§Kimlik Doğrulama Akışı
Akışın çoğu Play kütüphanesi tarafından yapılacaktır.
- Sunucudan istek jetonu alınız (sunucu-sunucu çağrılarında)
- Kullanıcıyı servis sağlayıcıya yönlendiriniz, burada kullanıcı kendi bilgilerini kullanmanız için izin verecektir.
- Servis sağlayıcı kullanıcıyı geri yönlendirip, size doğrulayıcı verecektir.
- 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.