Documentation

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

§Play’de OpenID Desteği

OpenId kullanıcıların tek bir hesap ile birkaç servise erişmesini sağlayan bir protokolüdür. Web geliştiricisi olarak, OpenID’yi kullanıcılarınız önceden varolan hesaplarını kullanarak, örneğin Google account, giriş yapmalarını sağlayabilirsiniz. Kurumsal kurumlarda, OpenID’yi şirketinizin SSO sunucusuna bağlanmak için kullanabilirsiniz.

§Özetle OpenID Akışı

  1. Kullanıcı size OpenID’sini verir. (Bağlantı).
  2. Sunucunuz bağlantının arkasındaki içeriği inceler ve size, kullanıcıyı yönlendirmek için gerekli olan bağlantıyı üretir.
  3. Kullanıcı OpenID sağlayıcısındaki izinleri onaylar ve sunucunuza geri yönlendirilir.
  4. Sunucunuz yönlendirmeden gelen bilgiyi alır ve OpenID sağlayıcısından bilginin doğruluğunu kontrol eder.

Eğer tüm kullanıcılar aynı OpenID sağlayıcısını kullanıyorsa 1. adım atlanabilir (örnek olarak tamamen Google hesaplarına güvenmeye karar verirseniz).

§Kullanım

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

libraryDependencies ++= Seq(
  javaWs
)

§Play’de OpenID

OpenID API’si iki önemli fonksiyona sahiptir:

Eğer Promise başarısız olursa, kullanıcıyı giriş sayfasına geri yönlendiren veya BadRequest döndüren bir geri çağırım tanımlayabilirsiniz.

§Örnek

conf/routes:

GET     /openID/login               controllers.OpenIDController.login()
POST    /openID/login               controllers.OpenIDController.loginPost()
GET     /openID/callback            controllers.OpenIDController.openIDCallback()

controller:

Java
import java.util.HashMap;
import java.util.Map;

import play.data.DynamicForm;
import play.data.Form;
import play.libs.F.Function;
import play.libs.F.Promise;
import play.libs.openid.OpenID;
import play.libs.openid.OpenID.UserInfo;
import play.mvc.Controller;
import play.mvc.Result;

public class OpenIDController extends Controller {

  public static Result login() {
    return ok(views.html.login.render(""));
  }

  public static Promise<Result> loginPost() {
    DynamicForm requestData = Form.form().bindFromRequest();
    String openID = requestData.get("openID");

    final Promise<String> redirectUrlPromise =
        OpenID.redirectURL(openID, routes.OpenIDController.openIDCallback().absoluteURL(request()));

    final Promise<Result> resultPromise = redirectUrlPromise.map(new Function<String, Result>() {
      @Override
      public Result apply(String url) {
        return redirect(url);
      }
    }).recover(new Function<Throwable, Result>() {
      @Override
      public Result apply(Throwable throwable) throws Throwable {
        return badRequest(views.html.login.render(throwable.getMessage()));
      }
    });

    return resultPromise;
  }

  public static Promise<Result> openIDCallback() {

    final Promise<UserInfo> userInfoPromise = OpenID.verifiedId();

    final Promise<Result> resultPromise = userInfoPromise.map(new Function<UserInfo, Result>() {
      @Override
      public Result apply(UserInfo userInfo) {
        return ok(userInfo.id + "\n" + userInfo.attributes);
      }
    }).recover(new Function<Throwable, Result>() {
      @Override
      public Result apply(Throwable throwable) throws Throwable {
        return badRequest(views.html.login.render(throwable.getMessage()));
      }
    });

    return resultPromise;
  }

}
Java 8
import javaguide.ws.controllers.routes;
import play.data.DynamicForm;
import play.data.Form;
import play.libs.F.Promise;
import play.libs.openid.OpenID;
import play.libs.openid.OpenID.UserInfo;
import play.mvc.Controller;
import play.mvc.Result;

public class OpenIDController extends Controller {

  public static Result login() {
    return ok(views.html.login.render(""));
  }

  public static Promise<Result> loginPost() {
    
    // Form data
    final DynamicForm requestData = Form.form().bindFromRequest();
    final String openID = requestData.get("openID");
    
    final Promise<String> redirectUrlPromise =
        OpenID.redirectURL(openID, routes.OpenIDController.openIDCallback().absoluteURL(request()));

    final Promise<Result> resultPromise = redirectUrlPromise.map(url -> {
      return redirect(url);
    }).recover(throwable -> {
        return badRequest(views.html.login.render(throwable.getMessage()));
    });

    return resultPromise;
  }

  public static Promise<Result> openIDCallback() {

    final Promise<UserInfo> userInfoPromise = OpenID.verifiedId();
    
    final Promise<Result> resultPromise = userInfoPromise.map(userInfo -> {
      return (Result) ok(userInfo.id + "\n" + userInfo.attributes);
    }).recover(throwable -> {
        return badRequest(views.html.login.render(throwable.getMessage()));
    });
    
    return resultPromise;
  }

}

§Genişletilmiş Özellikler

Kullanıcının OpenID’si size onun kimliğini verir. Bu protokol ayrıca genişletilmiş özellikleri destekler. Örneğin e-mail adresi, adı veya soyadı gibi.

İsteğe bağlı ve/veya gerekli özellikleri, OpenID sunucusundan isteyebilirsiniz. Gerekli özellikleri istemek demek, kullanıcı bu bilgileri sağlamadan sizin servisinize giriş yapamaz anlamına gelir.

Genişletilmiş özellikler yönlendirme bağlantısında talep edilir.

final Map<String, String> attributes = new HashMap<String, String>();
attributes.put("email", "http://schema.openid.net/contact/email");

final Promise<String> redirectUrlPromise = OpenID.redirectURL(
  openID, 
  routes.OpenIDController.openIDCallback().absoluteURL(request()), 
  attributes
);

Özellikler OpenID sunucusu UserInfo sağladıktan sonra uygun olacaktır.

Sonraki: OAuth tarafından korunan kaynaklara erişim


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.