OpenID Türkçeye “Açık Kimlik” olarak çevrilebilecek yeni bir kimlik doğrulama protokolüdür. Web’ de tek bir kimlik ile birden çok sisteme erişim sağlamak uzun zamandır üzerinde çalışan bir konu. Zaman zaman web’ deki büyük oyuncular kendi altyapılarını diğer sitelere açarak bu soruna çözüm üretmek istediler. Ancak bu çözümler başarısız oldu, bunun arkasındaki neden hepsinin merkezi olarak kurgulanmalarıydı. Bu yapılarda kullanıcıların ilk önce merkezi sistemde bir kimlik daha yaratmaları gerekiyordu. Kimlik sorununu çözmek için bir kimlik daha yaratmak web kullanıcılarını cezbetmedi.
Peki, OpenID bu soruna nasıl bir çözüm öneriyor?
OpenID dağıtık bir mimaride kimlik doğrulaması yapan sistemler ile kimlik doğrulamasına ihtiyaç duyan sistemler arasında iletişimin nasıl olacağını tanımlar. Ancak kimlik doğrulaması yapan sistemlerin bu işlemi nasıl gerçekleştireceği konusuna karışmaz. Bunun sonucu olarak isteyen tüm sistemler, ellerinde bulunan kimlikleri OpenID yardımı ile diğer sitelerin kullanımına sunabilirler. Son kullanıcılar ise bu yapı sayesinde zaten var olan kimliklerini OpenID üzerinden doğrulama yapan sitelerde kullanılabilirler.
OpenID nasıl çalışır?
Bir örnek üzerinden OpenID’nin nasıl çalıştığını inceleyelim. İlk önce süreçte yer alacak aktörlerimizi belirleyelim. İlk aktörümüz OpenID destekleyen kimliğini kullanarak bir web sitesine girmek isteyen web kullanıcımız, süreçte ona istemci ismini vereceğiz. Diğer aktörlerimiz ise istemcinin giriş yapmak istediği site (web sitesi) ve OpenID protokolünü destekleyen kimlik doğrulama servisi (kimlik doğrulayıcı).
Süreç şu şekilde işler:
1. İstemci, web sitesine kullanmak istediği kimlik doğrulayıcı adresini iletir. Bu adres kimlik doğrulayıcının belirlediği genel bir adres olabileceği gibi kimlik doğrulayıcı tarafından istemciye özel üretilmiş bir adreste olabilir. İstemciye özel üretilmiş bu adreslere istemcinin OpenID adresi denir.
2. Web sitesi, sunucu tarafında kimlik doğrulayıcının belirtilen adresine özel bir keşif isteği gönderir. Bu istek sonucunda kimlik doğrulayıcı süreçte kullanılacak adresi web sitesine iletir.
3. Web sitesi istemciyi, kimlik doğrulayıcının belirttiği adrese gönderir.
4. Bu aşamada kimlik doğrulayıcı ile istemci arasında kimlik doğrulaması işlemi gerçekleşir. Bu işlemin nasıl yapıldığı bizim sürecimizi ilgilendirmez.
5. İşlem sonucunda kimlik doğrulayıcı, doğrulama işlemi sonucu ile birlikte istemciyi tekrar web sitesine yönlendirir. Bu yönlendirme sırasında kimlik bilgileri hem açık olarak hem de şifrelenmiş olarak web sitesine taşınır.
6. Web sitesi eğer kimlik doğrulama işlemi sonucu olumlu ise, verilerin doğruluğundan emin olmak için sunucu taraflı olarak kimlik doğrulayıcıya bir kontrol isteği gönderir. Kontrol isteğinin içerisinde bir önceki adımda alınan kimlik bilgilerinin açık ve şifreli metinleri yer alır.
7. Kimlik doğrulayıcı sistem gelen istekteki şifreli veriyi çözer ve açık veri ile uyuşması durumunda web sitesine bilgilerin doğruluğunu onaylayan bir yanıt gönderir.
8. Web sitesi kimlik bilgilerinin doğruluğunda emin olur ve süreç tamamlanır.
ASP.NET MVC uygulamamızda OpenID’yi nasıl kullanabiliriz?
Uygulamamızda stackoverflow gibi birçok site tarafından da kullanılan açık kaynak kodlu DotNetOpenAuth kütüphanesini kullanacağız. Bu kütüphaneyi http://www.dotnetopenauth.net/ adresinden indirebilirsiniz.
Örneğimize “Internet” şablonunu kullanarak bir ASP.NET MVC 3 uygulaması yaratarak başlıyoruz. Kütüphaneyi kullanmamız için gerekli olan DotNetOpenAuth.dll dosyasını projemize referans olarak ekliyoruz.
Uygulamamızda akışı şu şekilde kurgulayacağız. Kullanıcı sağ üst köşede yer alan “Log On” linkine bastığında openid adresini girebileceği bir form ile karşılaşacak. Bu form’a girdiği OpenId bilgisi ile kimlik doğrulayıcı servisinden kullanıcının kimlik bilgisi doğrulanacak ve son olarak kullanıcı ana sayfaya yönlendirilecek.
İlk olarak kullanıcının OpenId bilgisini taşıyacak olan modelimizi aşağıdaki şekilde hazırlayalım.