Öncelikle merhabalar bu makalemde sizlere google servisini kullanarak web sayfamıza nasıl login olunabileceğini anlatıyor olacağım.
Tabiki öncelikle neden böyle bir servise ihtiyaç duyarım, bize ne avantaj sağlar ona değinmek lazım. Facebook ile login veya Google ile login gibi servisler bize yapacağımız web uygulamasını kullanacak kişilerin üye olmadan sistemimize daha doğrusu var olan üyelikleri(Google,Facebook vb..) ile çok hızlı bir şekilde işlem yapabilmelerini sağlar. Günümüzde her gördüğümüz siteye üye olmak bizi yormakta oysa benim zaten var olan üyelik bilgilerimi kullansa ben çok daha hızlı olarak işlem yapabilirim mantığla yola çıkarsak bu tür servislerin önemini anlayabiliriz. Ayrıca bu tür servisleri kullanırken kullanıcıya asla onun şifresini almayacağımızı, alamayacağımızı hissettirmemiz gerekmektedir bunun için butür servisleri kullanırken küçük bir bilgi vermemiz önemli olabilir.
Kısacası böyle bir servise ihtiyaç duyarım çünkü sistemime gelen insanları en kısa zamanda, uğraştırmadan sistemime dahil edebilmek için. Avantajlarına gelince kısa sürede kişi sisteme üye olabilmekte, her sistem için aynı e-posta adresi ve şifre kullanmış oluyur, her sitenin güvenlik sistemini bilmediğimiz için şifremizi google güvenerek korumuş oluyoruz
Lafı fazla uzatmadan hemen örneğimize geçelim.
Öncelikle Google OpenID protokolunu kullanır bundan dolayı bizde ücretsiz olan DotNetOpenAuth kütüphanesini kullanacağız. http://www.dotnetopenauth.net/ adresinden kütüphaneyi indirdikten sonra projemize referans olarak ekliyoruz.
Hemen default.aspx sayfama bir adet button ve label koyuyorum.
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server"
Text="Google ile Login" OnClick="Button1_Click" />
<br />
<asp:Label ID="lblUyari" runat="server"></asp:Label>
</div>
</form>
</body>
Kişinin button'a basınca google'ın login sayfasına gitmesine istiyorum ve eğer kişiye uyarı vereceksemde label'ı kullanacağım. Hemen button'unonclick olayını yazıyorum.
protected void Button1_Click(object sender, EventArgs e)
{
OpenIdRelyingParty openid = new OpenIdRelyingParty();
//öncelikle referans olarak eklediğimiz OpenIdRelyingParty nesnesinden oluşturuyorum
var b = new UriBuilder(Request.Url) { Query = "" };
//birtane google'a gönderilmek üzere Uri nesnesi oluşturuyorum
var req = openid.CreateRequest("https://www.google.com/accounts/o8/id", b.Uri, b.Uri);
//birtane istek nesnesi oluşturup parametre olarakda daha önce oluşturduğum Uri nesnesini veriyorum
req.RedirectToProvider();
//google'a gönderiyorum
}
protected void Page_Load(object sender, EventArgs e)
{
OpenIdRelyingParty rp = new OpenIdRelyingParty();
var r = rp.GetResponse();
if (r != null)
{
switch (r.Status)
{
case AuthenticationStatus.Authenticated:
Session["GoogleToken"] = r.ClaimedIdentifier.ToString();
//kişinin bilgilerini sorgulayabileceğimiz google'in bize vermiş olduğu geçici Token
Response.Redirect("giris.aspx"); //login başarılı ise yönlendirilecek sayfa
break;
case AuthenticationStatus.Canceled:
//kişi login sayfasında iptala basmışsa gösterilecek uyarı
lblUyari.Text = "İptal edildi.";
break;
case AuthenticationStatus.Failed:
//kişi yanlış kullanıcı adı veya şifre girmişse gösterilecek uyarı
lblUyari.Text = "Login başarısız.";
break;
}
}
}
Şimdi ise giris.aspx sayfasını yapalım bu sayfada kişinin istediğimiz bilgilerini google'dan isteyebileceğiz çünkü elimizde google'ın bize vermiş olduğuToken var.
Öncelikle giris.aspx sayfama 3 adet label ekliyorum. Bunlara login olan kişinin e-posta adresini,adını ve soyadını yazdıracağım.
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblEPosta" runat="server"></asp:Label>
<asp:Label ID="lblAdi" runat="server"></asp:Label>
<asp:Label ID="lblSoyadi" runat="server"></asp:Label>
</div>
</form>
</body>
Hemen giris.aspx sayfasının Page Load olayını yazıyoruz.
protected void Page_Load(object sender, EventArgs e)
{
OpenIdRelyingParty openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
//google'dan kişinin bilgilerini istemek için istek nesnesi oluşturuyoruz ve
//parametre olarakta daha önceden almış olduğumuz token'ı veriyoruz
var request = openid.CreateRequest(Session["GoogleToken"].ToString());
var fetchRequest = new FetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last);
//oluşturduğumuz istek nesnesine kişinin hangi bilgilerini istediğmizi ekliyoruz.
request.AddExtension(fetchRequest);
request.RedirectToProvider();
//isteği google'a iletiyoruz
}
else
{
var fetchResponse = response.GetExtension<FetchResponse>();
// Dönen cevabı session'da saklıyoruz
Session["FetchResponse"] = fetchResponse;
var response1 = Session["FetchResponse"] as FetchResponse;
//eğer cevap yoksa sayfa yüklenmiyor
if (response1 == null)
return;
// Gelen cevapları ekrandaki label'lara yazıyoruz.
lblEPosta.Text = response1.GetAttributeValue(WellKnownAttributes.Contact.Email) ?? "Boş";
lblAdi.Text = response1.GetAttributeValue(WellKnownAttributes.Name.First) ?? "Boş";
lblSoyadi.Text = response1.GetAttributeValue(WellKnownAttributes.Name.Last) ?? "Boş";
}
}
Eğer işlemlerimizi doğru yaptıysak tarayıcımızda e-posta adresimiz,adımız ve soyadımızın yazması gerekiyor.
Not:Facebook login servisini kullanan örnek bir site www.secretcv.com, Google login servisini kullanan örnek bir site www.enerjik.com.tr incelemekte fayda olabilir.
ibrahim BAYIR
www.ibrahimbayir.com.tr
Örnek Uygulama
Alıntıdır
Hiç yorum yok:
Yorum Gönder