Asp.Net Web API – Token Based Authentication

Logo Yazılım Ürünleri Destek, Eğitim, Satış, Raporlama ve Özel Yazılım Talepleriniz İçin DGN YAZILIM Açıldı !

Yaşadığınız tüm problemlerin çözümü için lütfen Tıklayın.


Asp.Net Web API – Token Based Authentication

  • Kulanıcı Adı
  • 18.11.2021
  • 0

<h1>Kaynak :&nbsp;https://www.gokhan-gokalp.com/en/asp-net-web-api-token-based-authentication/?unapproved=15963&amp;moderation-hash=0f9b496f23bd29ee2ec60290a88e0f08#comment-15963</h1> <h1>&nbsp;</h1> <h1>Asp.Net Web API &ndash; Token Based Authentication</h1> <p>Published by&nbsp;<a href="https://www.gokhan-gokalp.com/en/author/gok-gokalp/">Gökhan Gökalp</a>&nbsp;on&nbsp;<a href="https://www.gokhan-gokalp.com/en/2015/09/">September 2, 2015</a></p> <p>Merhaba arkadaşlar, bu makalemde Asp.Net Web API ile&nbsp;RESTful&nbsp;servis geliştirirken&nbsp;<strong>Token Based</strong>&nbsp;bir&nbsp;<strong>Authentication</strong>&nbsp;işlemi nasıl yapıldığına dair örnek bir proje yapacağız.</p> <p>RESTful&rsquo;ün&nbsp;önemini kısaca hatırlamak gerekirse:</p> <ul> <li>Fazlasıyla basit ve esneklik sağlamaktadır.</li> <li>REST&rsquo;in&nbsp;<strong>HTTP&nbsp;</strong>protokolü üzerine kurulmuş olmasıyla beraber günümüz modern web dünyasındaki bir çok uygulamalar kendini browser tabanlı uygulamalara bırakıyor ve artık bir çok işlem client-side tabanlı yapıldığı için REST servisleri bize bir artı daha sağlıyor bu anlamda.</li> </ul> <p>Özünde&nbsp;<strong>RESTful</strong>&nbsp;servisleri&nbsp;bize&nbsp;<strong>client-server</strong>&nbsp;arasındaki yapacak olduğumuz veri transferini&nbsp;<strong>SOAP</strong>&nbsp;veya&nbsp;<strong>RPC</strong>&nbsp;gibi kompleks mimariler yerine daha&nbsp;hafif ve esnek bir şekilde yapabilme olanağı&nbsp;sağlıyor.</p> <p>REST mimarisini hatırladığımıza göre, gelelim şimdi nedir bu&nbsp;<strong>Token Based</strong>&nbsp;<strong>Authentication?</strong></p> <blockquote> <p>Günümüz çağında geliştirilen neredeyse tüm uygulamaların bir mobil bacağı bulunmaktadır veya mobil tarafına da destek verebilecek şekilde servis mimarileri geliştirilmektedir. REST mimarisi üzerine kurulan bir serviste ise güvenlik işlemlerini ele alabilmek,&nbsp;<strong>client&rsquo;ı yetkilendirebilmek</strong>&nbsp;için&nbsp;<strong>Token</strong>&nbsp;(Jeton) bazlı bir yetkilendirme işlemi yapılmaktadır.</p> </blockquote> <p><strong>Token Based Authentication</strong>&nbsp;işleminin yaşam döngüsüne bakmak istediğimizde ise:<a href="https://i2.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/08/securitypattern.png?ssl=1"><img alt="securitypattern" src="https://i2.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/08/securitypattern.png?resize=380%2C336&amp;ssl=1" style="height:336px; width:380px" /></a></p> <ul> <li>Client kendi güvenlik bilgilerini girer ve bu bilgiler<strong>&nbsp;Authorization Server</strong>&lsquo;a gönderilir</li> <li>Authorization Server bu bilgileri doğrulursa, client&rsquo;a bir&nbsp;<strong>Access Token</strong>&nbsp;Http Response&rsquo;u döner.</li> <li>Client artık erişmek istediği servislere, elde etmiş olduğu Access Token&rsquo;ı &nbsp;Http Request&rsquo;in&nbsp;<strong>Authorization Header</strong>&lsquo;ına ekleyerek erişim sağlar.</li> </ul> <p>Bu ön bilgilerden sonra&nbsp;hemen örneğimize geçelim. Öncelikle örneğimizde&nbsp;<strong>Authentication</strong>&nbsp;işlemleri için&nbsp;<strong>OAuth 2.0</strong>&nbsp;protokolü ile sağlayacağız&nbsp;ve bunun için Microsoft&rsquo;un&nbsp;<strong>Owin</strong>&nbsp;kütüphanesinden yararlanacağız.</p> <p>Owin temelinde&nbsp;<strong>IIS</strong>&nbsp;ile&nbsp;<strong>Application</strong>&nbsp;arasında kendi pipeline&rsquo;ını kuruyor ve işlemleri burada handle&nbsp;ediyor. Lightweight bir pipeline&rsquo;a sahiptir.</p> <p><a href="https://i1.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/OWIN__2.png?ssl=1"><img alt="OWIN__2" src="https://i1.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/OWIN__2.png?resize=797%2C277&amp;ssl=1" style="height:216px; width:622px" /></a></p> <p><strong>AspNetWebAPIOAuth</strong>&nbsp;isminde bir&nbsp;<strong>Asp.Net Web Application</strong>&nbsp;oluşturuyorum. Oluştururken Template kısmından&nbsp;<strong>Empty</strong>&nbsp;seçip Core Referansını ise&nbsp;<strong>Web API</strong>&nbsp;seçerek tamamlıyorum.</p> <p>Projemizi oluşturduğumuza göre hemen projemiz üzerine sağ tıklayarak NuGet Package Manager&rsquo;ı açıp Search kısmından&nbsp;<strong>OAuth</strong>&nbsp;yazarak çıkacak olan sonuçlar içinden<strong>&nbsp;Microsoft.AspNet.WebApi.Owin,&nbsp;Microsoft.Owin.Host.SystemWeb&nbsp;</strong>ve&nbsp;<strong>Microsoft.Owin.Security.OAuth</strong>&lsquo;u seçerek projemize kuruyoruz.</p> <p>Proje içerisine&nbsp;<strong>OAuth</strong>&nbsp;isimli bir klasör ekleyerek servis&nbsp;çalışmaya başlarken&nbsp;<strong>Owin&nbsp;</strong>pipeline&rsquo;ını&nbsp;ayağa kaldırabilmek için&nbsp;<strong>Startup</strong>&nbsp;sınıfını hazırlamaya başlıyoruz ve içerisinde gerekli konfigürasyon ayarlarını&nbsp;<strong>WebApiConfig</strong>&lsquo;e register edip,&nbsp;<strong>Owin Server</strong>&nbsp;üzerinde uygulama oluşurken kullanacağı konfigürasyon ayarınıda belirtiyoruz.</p> <p>Startup.cs:</p> <pre> using AspNetWebAPIOAuth.OAuth.Providers; using Microsoft.Owin; using Microsoft.Owin.Security.OAuth; using Owin; using System; using System.Web.Http; [assembly: OwinStartup(typeof(AspNetWebAPIOAuth.OAuth.Startup))] namespace AspNetWebAPIOAuth.OAuth { // Servis çalışmaya başlarken Owin pipeline&#39;ını ayağa kaldırabilmek için Startup&#39;u hazırlıyoruz. public class Startup { public void Configuration(IAppBuilder appBuilder) { HttpConfiguration httpConfiguration = new HttpConfiguration(); ConfigureOAuth(appBuilder); WebApiConfig.Register(httpConfiguration); appBuilder.UseWebApi(httpConfiguration); } private void ConfigureOAuth(IAppBuilder appBuilder) { OAuthAuthorizationServerOptions oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions() { TokenEndpointPath = new Microsoft.Owin.PathString(&quot;/token&quot;), // token alacağımız path&#39;i belirtiyoruz AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), AllowInsecureHttp = true, Provider = new SimpleAuthorizationServerProvider() }; // AppBuilder&#39;a token üretimini gerçekleştirebilmek için ilgili authorization ayarlarımızı veriyoruz. appBuilder.UseOAuthAuthorizationServer(oAuthAuthorizationServerOptions); // Authentication type olarak ise Bearer Authentication&#39;ı kullanacağımızı belirtiyoruz. // Bearer token OAuth 2.0 ile gelen standartlaşmış token türüdür. // Herhangi kriptolu bir veriye ihtiyaç duymadan client tarafından token isteğinde bulunulur ve server belirli bir expire date&#39;e sahip bir access_token üretir. // Bearer token üzerinde güvenlik SSL&#39;e dayanır. // Bir diğer tip ise MAC token&#39;dır. OAuth 1.0 versiyonunda kullanılıyor, hem client&#39;a, hemde server tarafına implementasyonlardan dolayı ek maliyet çıkartmaktadır. Bu maliyetin yanı sıra ise Bearer token&#39;a göre kaynak alış verişinin biraz daha güvenli olduğu söyleniyor çünkü client her request&#39;inde veriyi hmac ile imzalayıp verileri kriptolu bir şekilde göndermeleri gerektiği için. appBuilder.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); } } }</pre> <p>Owin ayarlarını başlangıçta içeren sınıfımızı oluşturduk. Sınıf satırlarındaki yorumlarda da belirttiğimiz üzere, Authentication type olarak&nbsp;<strong>Bearer Authentication</strong>&nbsp;kullanacağız. Sebebi ise daha fazla lightweight olup OAuth 2.0 ile standart bir hale gelmesi ve hem client hemde server side için authentication işlemlerini daha fazla kolaylaştırmasıdır. Ayrıca tüm işlemler&nbsp;her ne kadar bir access token üzerinden yürüyecek olsada,&nbsp;<strong>SSL</strong>&nbsp;ile client ile server arasındaki veri güvenliği sağlanmalıdır.</p> <p><strong>OAuthAuthorizationServerOptions</strong>&nbsp;ayarlarını tanımlarken&nbsp;<strong>Provider</strong>&nbsp;olarak&nbsp;<strong>OAuthAuthorizationServerProvider&nbsp;</strong>sınıfından miras alarak türeteceğimiz&nbsp;<strong>SimpleAuthorizationServerProvider</strong>&nbsp;&lsquo;ı seçtik. Şimdi gelelim bu provider&rsquo;ın kodlarını incelemeye. Öncesinde daha önce açtığımız&nbsp;OAuth klasörünün içine hemen bir&nbsp;<strong>Providers</strong>&nbsp;isminde klasör daha açarak içerisinde ilgili sınıfımızı oluşturuyoruz.</p> <p>SimpleAuthorizationServerProvider.cs:</p> <pre> using Microsoft.Owin.Security.OAuth; using System.Threading.Tasks; using System.Security.Claims; namespace AspNetWebAPIOAuth.OAuth.Providers { public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider { // OAuthAuthorizationServerProvider sınıfının client erişimine izin verebilmek için ilgili ValidateClientAuthentication metotunu override ediyoruz. public override async System.Threading.Tasks.Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) { context.Validated(); } // OAuthAuthorizationServerProvider sınıfının kaynak erişimine izin verebilmek için ilgili GrantResourceOwnerCredentials metotunu override ediyoruz. public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { // CORS ayarlarını set ediyoruz. context.OwinContext.Response.Headers.Add(&quot;Access-Control-Allow-Origin&quot;, new[] { &quot;*&quot; }); // Kullanıcının access_token alabilmesi için gerekli validation işlemlerini yapıyoruz. if (context.UserName == &quot;Gokhan&quot; &amp;&amp; context.Password == &quot;123456&quot;) { var identity = new ClaimsIdentity(context.Options.AuthenticationType); identity.AddClaim(new Claim(&quot;sub&quot;, context.UserName)); identity.AddClaim(new Claim(&quot;role&quot;, &quot;user&quot;)); context.Validated(identity); } else { context.SetError(&quot;invalid_grant&quot;, &quot;Kullanıcı adı veya şifre yanlış.&quot;); } } } }</pre> <p><strong>OAuthAuthorizationServerProvider&nbsp;</strong>sınıfının iki metodunu ezdiğimizi görüyoruz. Bunlardan birincisi, Client&rsquo;ı doğrulamak için ki direkt olarak doğruladık biz. İkincisi ise asıl kaynak erişimine verilecek yetkilerin ayarlandığı ana kısım. Öncelikle burada CORS ayarlarını gerçekeleştirdik. Hemen&nbsp;<strong>CORS</strong>&nbsp;nedir hatırlatması yapmak gerekirse:</p> <blockquote> <p><strong>CORS</strong>&nbsp;domain&rsquo;ler arası kaynak paylaşımını sağlamaya yarayan bir&nbsp;mekanizmadır.&nbsp;Bir domain&rsquo;in bir başka domain&rsquo;in kaynağını kullanabilmesini sağlar.</p> </blockquote> <p>Hızlıca CORS&rsquo;u da tekrardan hatırladığımız üzere devamında koda baktığımızda da net bir şekilde görüldüğü gibi&nbsp;<strong>validation</strong>&nbsp;işlemlerini gerçekleştiriyoruz. Eğer kullanıcı geçerli bir kullanıcı ise bir kimlik yaratıp,&nbsp;<strong>context</strong>&nbsp;üzerinde doğruluyor.</p> <p>Evet şuan Owin için OAuth 2.0 implementasyonunu gerçekleştirmiş bulunuyoruz. Şimdi gelelim&nbsp;<strong>Controller</strong>&nbsp;üzerinde ki kullanımına. Hemen Controllers kısmına OrdersController ekliyorum ve içine List isminde bir metot tanımlıyorum. Form Authentication&rsquo;dan da hatırlayabileceğiniz üzere metotların üstüne attirbute olarak&nbsp;[<strong>Authorize</strong>] attributunu ekliyorduk, Owin içinde aynı attribut&rsquo;u kullanıyoruz.</p> <p>OrdersController.cs:</p> <pre> using System.Collections.Generic; using System.Web.Http; namespace AspNetWebAPIOAuth.Controllers { public class OrdersController : ApiController { [HttpGet] [Authorize] public List&lt;string&gt; List() { List&lt;string&gt; orders = new List&lt;string&gt;(); orders.Add(&quot;Elma&quot;); orders.Add(&quot;Armut&quot;); orders.Add(&quot;Erik&quot;); return orders; } } }</pre> <p>Api tarafında herşey hazır olduğuna göre projemizi test edebiliriz. Ben tool olarak Postman&rsquo;ı tercih ediyorum siz isterseniz Fiddler Composer&rsquo;da kullanabilirsiniz. Postman data gönderirken bana daha fazla esneklik sağlıyor açıkcası.&nbsp;</p> <p>Öncelikle direkt olarak ilgili api metodumuza erişmeye çalıştığımızda alacağımız sonuca&nbsp;bir bakalım:</p> <p><a href="https://i1.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/oauth_hata.jpg?ssl=1"><img alt="oauth_hata" src="https://i1.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/oauth_hata.jpg?resize=1090%2C414&amp;ssl=1" style="height:236px; width:622px" /></a></p> <p>&nbsp;</p> <p><strong>api/Orders/List</strong>&nbsp;url&rsquo;i ile GET isteği attığımızda Authorization hatası aldığımızı görüyoruz. Öncelikle<strong>&nbsp;/token</strong>&nbsp;path&rsquo;i ile belirttiğimiz adrese gidip geçerli bir&nbsp;<strong>access_token</strong>&nbsp;almalıyız.</p> <p>Bunun için&nbsp;<strong>POST</strong>&nbsp;tipinde<strong>&nbsp;/token</strong>&nbsp;url&rsquo;ine Headers&rsquo;a ve Body&rsquo;e bir kaç parametre set ederek gitmemiz gerekmektedir.</p> <p>Headers&rsquo;e eklenecek parametreler:</p> <p><strong>Header</strong>: Accept &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<strong>Value</strong>: application/json<br /> <strong>Header</strong>: Content-Type &nbsp; &nbsp;&nbsp;<strong>Value</strong>: application/x-www-form-urlencoded</p> <p>Body&rsquo;e eklenecek parametreler:</p> <p>data tipi x-www-form-urlencoded olarak seçilip,</p> <p><strong>Key</strong>: grant_type &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>Value</strong>: password<br /> <strong>Key</strong>: username &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<strong>Value</strong>: Gokhan (Kullanıcı adınız)<br /> <strong>Key</strong>: password &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<strong>Value</strong>: 123456 (Şifreniz)</p> <p>İlgili bilgileri girdikten sonra POST işlemini gerçekleştirelim ve gelen sonuca bakalım:</p> <p><a href="https://i0.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/oauth_token.jpg?ssl=1"><img alt="oauth_token" src="https://i0.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/oauth_token.jpg?resize=1086%2C577&amp;ssl=1" style="height:331px; width:622px" /></a></p> <p>&nbsp;</p> <p>Geriye dönen JSON&nbsp;sorgusunda&nbsp;<strong>access_token</strong>&nbsp;oluşmuş ve expires_in süresi ile geldiğini görüyoruz. Bu süreyi&nbsp;hatırlarsak Startup kısmında konfigürasyon bölümünde&nbsp;<strong>AccessTokenExpireTimeSpan</strong>&nbsp;propertysi ile vermiştik.</p> <p>Artık bu token&rsquo;ı kullanarak tekrardan&nbsp;<strong>api/Orders/List</strong>&nbsp;url&rsquo;ine tekrardan bir GET sorgusunda bulunalım. Fakat bu sefer ilgili token&rsquo;ı Header&rsquo;a ekleyerek gönderiyoruz.</p> <p>Headers&rsquo;e eklenecek parametreler:</p> <p><strong>Header</strong>: Content-Type &nbsp; &nbsp; &nbsp;<strong>Value</strong>: application/json<br /> <strong>Header</strong>: Authorization &nbsp;&nbsp; &nbsp; &nbsp;<strong>Value</strong>:&nbsp;Bearer&nbsp;jyMJNFpYdBOZxoUZsutu7vNe4JY&ndash;kdvdjTylrJi_rZPC5VUOFSTvej-Sq0jvCj1gYbg0HHAk6ILoj0U7G3zCYcl1lK9tA6YwMGODccsorhjwDTzuuGprU00f5j4Ly1DUhS54TejbrZtn1RMegSCXFfixjkYkeXeVd6eP0eGGrAr6f3ICVGz7KASR28soQEh_4sXpOZLmDpDJFKKAEoI_q0h9_7qvfIIjm8t0lDcCp4</p> <p>Token tipimiz&nbsp;<strong>Bearer</strong>&nbsp;olduğu için headerda Authorization kısmının değerine access_token&rsquo;ı girmeden önce Bearer tag&rsquo;ini ekleyip daha sonrasında access_token&rsquo;ı ekliyoruz.</p> <p><a href="https://i1.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/oauth_access.jpg?ssl=1"><img alt="oauth_access" src="https://i1.wp.com/gokhan-gokalp.com/wp-content/uploads/2015/09/oauth_access.jpg?resize=1078%2C494&amp;ssl=1" style="height:285px; width:622px" /></a></p> <p>&nbsp;</p> <p>Servisten başarıyla bilgileri çektiğimizi görüyoruz. Bir sonraki Web API&nbsp;konumda ise Custom Token Based Authentication işlemi nasıl gerçekleştirilebilir hakkında bir şeyler yazmayı planlıyorum. Şimdilik sağlıcakla kalın.</p>

Paylaşmak için tıkla!

Kullanıcı Yorumları

Hakkımda Temel Bilgiler

1992 yılı İstanbul doğumluyum. "Beykent Üniversitesi/Bilgisayar Programcılığı" bölümü mezunuyum, 7 yılı aşkın süredir Logo firmasının üretmiş olduğu ERP ürünlerine teknik destek vermek üzere “Logo Erp Danışmanı/Sistem Uzmanı” olarak çalıştım. 2020 Şubat ayında yıllardır hayalini kurduğum "kendi işimi yapma" düşüncemi hayata geçirmek üzere DGN Yazılım firmasını kurdum. Ayrıca .Net C# (MVC) yazılım dilini kullanarak Web tabanlı/Mobil Uyumlu, Logo yazılım entegreli ya da tamamen bağımsız uygulamalar geliştiriyorum.

Logo Yazılım Ürünleri Destek, Eğitim, Satış, Raporlama ve Özel Yazılım Talepleriniz İçin DGN YAZILIM Açıldı !

Yaşadığınız tüm problemlerin çözümü için lütfen Tıklayın..



Sahip olduğum sertifikalar;


Logo Erp ve E-Dönüşüm ürünleri için (Go3,Tiger3,E-(Fatura-Arşiv-Defter-Mutabakat-İrsaliye);

  • Eğitim ( Standart,konu odaklı,bireysel,ürün uzmanlık,özel raporlama),
  • Kurulum ve kurgulama ,
  • Yerinde servis ve uzak bağlantı teknik destek,
  • SQL raporlama (Genellikle Logo ürünleri veritabanını baz alarak yapılacak,proje kapsamında SQL raporları),
  • SQL üzerinden uygulanabilecek,iş kolaylaştıran ek çözümler(Trigger,Insert,Procedure,Functions,Updates),
  • Logo ürünlerine uyumlu,ek/yardımcı program geliştirme(C# (MVC) Web Form),
  • Veritabanı bakım işlemleri,
  • LOD(Logo Object Designer) ile ihtiyaca özel arayüz uyarlamaları hizmetleri vermekteyim.


Zaman ayırıp okuduğunuz için teşekkür ederim, saygılarımla ..

2

  • Name

    Eray Doğan

  • Age

    27

  • Website

    www.eraydogan.com.tr

  • Hometown

    İstanbul



Öz Geçmişim

  • İş Hayatı

  • 2010-2014

    Ata Bilgisayar

    Teknik destek uzmanı

    Bilgisayar ve server bakım , onarım işlemleri. Network kurulum işlemleri . Satış danışmanı.

  • 2014-2017

    Ata Bilgisayar

    Logo Sistem Uzmanı

      Logo Erp ve E-Dönüşüm ürünleri için (Go3,Tiger3,E-(Fatura-Arsiv-Defter-Mutabakat);
    • Eğitim ( Standart,konu odaklı,bireysel,ürün uzmanlık,özel raporlama),
    • Kurulum ve kurgulama
    • Yerinde ve uzak bağlantı teknik destek
    • SQL raporlama (Genellikle Logo ürünleri veritabanını baz alarak yapılacak SQL raporları )
    • Logo ürünlerine uyumlu,ihtiyaca özel ek/yardımcı program geliştirme
    • Veritabanı bakım işlemleri hizmetleri vermekteyim.

  • 2017-2020

    Aksu Yazılım

    Logo Sistem Uzmanı/Bölüm Sorumlusu

      Logo Erp ve E-Dönüşüm ürünleri için (Go3,Tiger3,E-(Fatura-Arsiv-Defter-Mutabakat);
    • Eğitim ( Standart,konu odaklı,bireysel,ürün uzmanlık,özel raporlama),
    • Kurulum ve kurgulama
    • Yerinde ve uzak bağlantı teknik destek
    • SQL raporlama (Genellikle Logo ürünleri veritabanını baz alarak yapılacak SQL raporları )
    • SQL üzerinden uygulanabilecek,iş kolaylaştıran ek çözümler(Trigger,Insert,Procedure,Functions,Updates)
    • Logo ürünlerine uyumlu,ihtiyaca özel ek/yardımcı program geliştirme
    • Veritabanı bakım işlemleri hizmetleri vermekteyim.
    • LOD(Logo Object Designer) ile ihtiyaca özel arayüz uyarlamaları hizmetleri vermekteyim.

  • 2020-Şubat ( Devam Ediyor )

    DGN Yazılım www.dgn-yazilim.com

    Kurucu

      Logo ürünleri;
    • Destek
    • Eğitim
    • Satış
    • SQL raporlama (Genellikle Logo ürünleri veritabanını baz alarak yapılacak SQL raporları)
    • Logo entegreli ya da bağımsız yazılım geliştirmeleri

  • EĞİTİM

  • 2006-2010

    Gürpınar İMKB E.M.L

    Ağ İşletmenliği

  • 2018-2020

    Beykent Üniversitesi

    Bilgisayar Programcılığı(İÖ)

  • Lisanslar ve Sertifikalar

  • 2018-2025

    LOGO Yazılım

    Tiger 3-Logo Sistem Uzmanı

  • 2018-2025

    LOGO Yazılım

    Logo Uyarlama Uzmanı (Windows)

  • 2018-2025

    LOGO Yazılım

    Logo Tiger 3 Enterprise Sistem Uzmanı

  • 2018-2025

    LOGO Yazılım

    Logo E-Fatura Sistem Uzmanı

  • 2018-2025

    LOGO Yazılım

    Logo Bordro Plus Sistem Uzmanı

  • 2018-2025

    LOGO Yazılım

    Logo Go 3 Sistem Uzmanı

  • Gönüllü Deneyimler

  • 2016(Devam Ediyor)

    Blogger

    www.eraydogan.com.tr

    Amacım iş hayatımda edindiğim bilgi ve tecrübelere web üzerinden erişebilmek, kod içeriği olmayan bilgileri ise herkesle paylaşmaktır.

Yetenekler

Logo Sistem Uzmanı

100%

Logo Database(Raporlama/Trigger/Function/Updates)

100%

Microsoft SQL Server

90%

HTML,CSS Jquery

25%

Proje Yönetimi

90%

T-SQL

85%

Logo Object Designer(LOD)

95%

Asp MVC

30%

SQL Veritabanı Üzerinden Yapılmış, İş Kolaylaştırıcı Ek Çözümler(Trigger,Function,Stored Procedure vb.)

Daha fazla çözüm görüntülemek için irtibata geçebilirsiniz.

TALEP : Cariye ait Iban numarası değiştiğinde bunun loglanması ve raporlanmasını istiyoruz.

TALEP : Sipariş browserımda filtre var 'Sevk Edilmeyenleri' listeliyorum . Siparişimizi sevk ettiğimizde henüz müşteriye ulaşmadığı için sevk irsaliyesi statüsünü 'Öneri' olarak kayıt ediyoruz. Siparişi sevk etsekte henüz irsaliye statüsü 'öneri' olduğu için sipariş browserında listeleniyor . Bunun listelenmesini istemiyorum . Çözüm Siparişin tamamı sevk olduğunda sipariş Döküman İzleme Numarasına '1' yazdırılacak ( Trigger ile ) . Sipariş filtresinde döküman izleme numarası 1 olanları getirme dediğimizde talebiniz gerçekleşmiş oluyor .

TALEP : Yapılacak bir proje için çıkış maliyetinin fifo yöntemine göre maliyetinin hesaplayan bir function ihtiyacına istinaden yazılmış bir trigger

TALEP : Malzeme kodlarına verilecek kategori numarasına göre yazdırma ekranında gruplanması isteniyor.

TALEP : Malzeme eklendiğinde barkod numarasını 1 artırma işlemi

TALEP : Tüm malzemelerimin kataloğumda sayfa numaraları mevcut.Sipariş girerken doğal olarak bu sıralamaya dikkat edilemiyor ancak kağıt çıktı alınırken sipariş satırları bu sıralamaya göre çıksın istiyorum .Çözüm ; Malzeme kartları içerisinde herhangi bir alana sayfa numaraları yazıldı;

TALEP : İrsaliye eklendiğinde bilgi maili atılması isteniyor.

TALEP : Malzeme özel kodunda ki veriyi sipariş satırına yazdırma işlemi.

TALEP : Logoya girilen ödemesiz siparişlerin, ödemeli olarak değiştirilmesi.(Veritabanından)

TALEP : Kaynak firmamdaki malzemeye ait varyantların özellik seti ve değerlerin aynıları hedef firmada da var . Ancak varyant kodları birbirinden farklı , yapılacak yazılım projesi için bu varyant kodların aynı olması gerekiyor .Çözüm : Yazılan cursor ile malzeme kartlara ait birden fazla özellik seti ve değerleri tek satır haline alınıp yeni tabloya farklı firma numaraları ile yazılması sağlandı .Gerisi tablo üzerinden eşitleme yaparak farklı varyant kodlarını eşitleme update'i oldu.Proje resimlerinden de konuyu detaylı anlamak mümkün.

TALEP : Satış elemanında ki veriyi yetki koduna yazdırma işlemi.

TALEP : Sipariş eklendiğinde mail atılması işlemi.

TALEP : Cari hesapta girdiğim ülke bilgisini sipariş browserında görmek istyiorum . (Lod kullanmak istemiyorum ) Çözüm :Siparişte tanımlı tablo oluşturuldu ( arayüz uyarlama ile ) bu tanımlı tablo da ülke diye bir kolon oluşturuldu . Öncelikle Oluşturulan Ülke İsmi Arayüz uyarlama ile browsera çekilip listelenmesi sağlandı . Ardından yazılan trigger ile sipariş kaydolduğunda cari de ki ülke bilgisini bu tabloya yazması sağlanıldı

TALEP : Talep fişi girerken satıra gireceğim bilgiler üzerinden formül hesaplaması yapıp , bunu satır açıklamasına yazmasını istiyorum . (Çap bilgisi doluysa a formülünden, dolu değilse b formülden hesaplamasını istiyorum ) Çözüm : Talep fişlerinde 4 adet tanımlı alan oluşturuldu(LG_003_03_DEFNFLDSTRANV) . Bu alanlar üzerinde girilen bilgileri trigger ile talep fişinde ki satıra yazılması sağlandı.

TALEP : Tablo-Html görünümünde irsaliye satırlarınım mail atılmasını istiyoruz.

TALEP : Vereceğim excel belgesi üzeinden malzeme - kkk atamalarının insert edilmesi

TALEP : Malzemeye ait ataması yapılan özellik seti değerlerini tek bir kolonda toplayacak bir function yazılması isteniyor(Yazılımcı Tarafından).Yazılımcı sorgusunda örneğin select * from LG_003_ITEMS gibi sonuç dönen tablosunda function kullanarak ilgili malzemeye ait özelliklerin tek kolonda toplanmasını istiyor. Çözüm :Function yazıldı,select sorgusuna eklenerek çözüme ulaştırıldı

TALEP : Resimde ki sitede 'Özellikler' dediği kısım Logoda ki Özellik Seti Kodundan geliyor.Altında ki bilgiler ise Özellik Koduna ait değerleri listeliyor.Bizden istenen ise yazılacak functiona verilecek özellik seti kodu ve değerlerine göre malzeme kodu dönecek bir sql sorgusuydu . Sorgu sonucu aşağıda ki malzemelerin listelenmesi sağlanmıştır.

TALEP : Gelen e-faturalarımızı logo connectten 'kaydet' ile içeri almıyoruz.Fatura çıktısını alıp logoya manuel işliyoruz.Bu durumda logoda faturaya sağ tuş e-fatura/e-arşiv görüntüle dediğimizde faturanın görüntü şablonu gelmiyor . Çözüm : Yazılan trigger ile fatura kayıt olduğunda logo connecte gidip görüntü şablonunu logoda ki faturanın içine alması sağlandı .

TALEP : Talep :Verilen fatura numarası ve ödeme plan koduna göre ödeme hareketlerini güncelle

TALEP : Verilen formüle göre ürünlerin stokta kalmasını hesaplayan bir procedure hazırlanması

Talep: Dövizli bakiyelerimi, son ödeme ve son satış tarihlerini de ana ekranımda görmek istiyorum

SQL Veritabanı Üzerinden Yapılmış, İş Kolaylaştırıcı Ek Çözümler(Trigger,Function,Stored Procedure vb.)

Daha fazla çözüm görüntülemek için irtibata geçebilirsiniz.

TALEP : Cariye ait Iban numarası değiştiğinde bunun loglanması ve raporlanmasını istiyoruz.

TALEP : Sipariş browserımda filtre var 'Sevk Edilmeyenleri' listeliyorum . Siparişimizi sevk ettiğimizde henüz müşteriye ulaşmadığı için sevk irsaliyesi statüsünü 'Öneri' olarak kayıt ediyoruz. Siparişi sevk etsekte henüz irsaliye statüsü 'öneri' olduğu için sipariş browserında listeleniyor . Bunun listelenmesini istemiyorum . Çözüm Siparişin tamamı sevk olduğunda sipariş Döküman İzleme Numarasına '1' yazdırılacak ( Trigger ile ) . Sipariş filtresinde döküman izleme numarası 1 olanları getirme dediğimizde talebiniz gerçekleşmiş oluyor .

TALEP : Yapılacak bir proje için çıkış maliyetinin fifo yöntemine göre maliyetinin hesaplayan bir function ihtiyacına istinaden yazılmış bir trigger

TALEP : Malzeme kodlarına verilecek kategori numarasına göre yazdırma ekranında gruplanması isteniyor.

TALEP : Malzeme eklendiğinde barkod numarasını 1 artırma işlemi

TALEP : Tüm malzemelerimin kataloğumda sayfa numaraları mevcut.Sipariş girerken doğal olarak bu sıralamaya dikkat edilemiyor ancak kağıt çıktı alınırken sipariş satırları bu sıralamaya göre çıksın istiyorum .Çözüm ; Malzeme kartları içerisinde herhangi bir alana sayfa numaraları yazıldı;

TALEP : İrsaliye eklendiğinde bilgi maili atılması isteniyor.

TALEP : Malzeme özel kodunda ki veriyi sipariş satırına yazdırma işlemi.

TALEP : Logoya girilen ödemesiz siparişlerin, ödemeli olarak değiştirilmesi.(Veritabanından)

TALEP : Kaynak firmamdaki malzemeye ait varyantların özellik seti ve değerlerin aynıları hedef firmada da var . Ancak varyant kodları birbirinden farklı , yapılacak yazılım projesi için bu varyant kodların aynı olması gerekiyor .Çözüm : Yazılan cursor ile malzeme kartlara ait birden fazla özellik seti ve değerleri tek satır haline alınıp yeni tabloya farklı firma numaraları ile yazılması sağlandı .Gerisi tablo üzerinden eşitleme yaparak farklı varyant kodlarını eşitleme update'i oldu.Proje resimlerinden de konuyu detaylı anlamak mümkün.

TALEP : Satış elemanında ki veriyi yetki koduna yazdırma işlemi.

TALEP : Sipariş eklendiğinde mail atılması işlemi.

TALEP : Cari hesapta girdiğim ülke bilgisini sipariş browserında görmek istyiorum . (Lod kullanmak istemiyorum ) Çözüm :Siparişte tanımlı tablo oluşturuldu ( arayüz uyarlama ile ) bu tanımlı tablo da ülke diye bir kolon oluşturuldu . Öncelikle Oluşturulan Ülke İsmi Arayüz uyarlama ile browsera çekilip listelenmesi sağlandı . Ardından yazılan trigger ile sipariş kaydolduğunda cari de ki ülke bilgisini bu tabloya yazması sağlanıldı

TALEP : Talep fişi girerken satıra gireceğim bilgiler üzerinden formül hesaplaması yapıp , bunu satır açıklamasına yazmasını istiyorum . (Çap bilgisi doluysa a formülünden, dolu değilse b formülden hesaplamasını istiyorum ) Çözüm : Talep fişlerinde 4 adet tanımlı alan oluşturuldu(LG_003_03_DEFNFLDSTRANV) . Bu alanlar üzerinde girilen bilgileri trigger ile talep fişinde ki satıra yazılması sağlandı.

TALEP : Tablo-Html görünümünde irsaliye satırlarınım mail atılmasını istiyoruz.

TALEP : Vereceğim excel belgesi üzeinden malzeme - kkk atamalarının insert edilmesi

TALEP : Malzemeye ait ataması yapılan özellik seti değerlerini tek bir kolonda toplayacak bir function yazılması isteniyor(Yazılımcı Tarafından).Yazılımcı sorgusunda örneğin select * from LG_003_ITEMS gibi sonuç dönen tablosunda function kullanarak ilgili malzemeye ait özelliklerin tek kolonda toplanmasını istiyor. Çözüm :Function yazıldı,select sorgusuna eklenerek çözüme ulaştırıldı

TALEP : Resimde ki sitede 'Özellikler' dediği kısım Logoda ki Özellik Seti Kodundan geliyor.Altında ki bilgiler ise Özellik Koduna ait değerleri listeliyor.Bizden istenen ise yazılacak functiona verilecek özellik seti kodu ve değerlerine göre malzeme kodu dönecek bir sql sorgusuydu . Sorgu sonucu aşağıda ki malzemelerin listelenmesi sağlanmıştır.

TALEP : Gelen e-faturalarımızı logo connectten 'kaydet' ile içeri almıyoruz.Fatura çıktısını alıp logoya manuel işliyoruz.Bu durumda logoda faturaya sağ tuş e-fatura/e-arşiv görüntüle dediğimizde faturanın görüntü şablonu gelmiyor . Çözüm : Yazılan trigger ile fatura kayıt olduğunda logo connecte gidip görüntü şablonunu logoda ki faturanın içine alması sağlandı .

TALEP : Talep :Verilen fatura numarası ve ödeme plan koduna göre ödeme hareketlerini güncelle

TALEP : Verilen formüle göre ürünlerin stokta kalmasını hesaplayan bir procedure hazırlanması

Talep: Dövizli bakiyelerimi, son ödeme ve son satış tarihlerini de ana ekranımda görmek istiyorum

LOD(Logo Object Designer) İle İsteğe Özel Uyarlanan Formlar

Daha fazla yapılmış işleri görmek için lütfen irtibata geçin.

TALLP : İlksatırdagirilensatıselemanı2.Satırda ki caride yoksa satır girisini engelle

TALEP : Kredi kartı fişlerinde geri ödeme planı uygulanmamış ise fişi kayıt ettirmesin.

TALEP : Miktar girişi yapıp tab ile kolon değişikliği yaptımda malzeme içinde ki paket miktarını göstersin.

TALEP : Sipariş fiş numarası değişirse bilgi maili gönderilmesi

TALEP : Sipariş fişlerinde satırda yeni bir kolona veri girişi yapıp , raporlarda kullanmak istiyorum

TALEP : Cari hesaba gireceğim bilgileri sipariş fişinde cari seçildiğinde kullanıcıya bilgi şeklinde listelesin.Aynı zamanda yanında ki alanda yazılan bilgi gözüksün .İlk Proje :) ;

TALEP : Sipariş kolonlarında malzemenin fiili stok bilgisini görmek istiyorum.

TALEP : Malzeme browserında ihtayaca özel bilgiler isteniyor.(2.Birim,özelkod vb.)

TALEP : Türü karma koli olan malzemenin çıkışı olduğunda , karma koli satırlarında tanımlı olan malzemeler ( tanımlanan miktar kadar ) stoğumdan düşsün .Not:Fişler birbirlerine fişno-özelkod ile bağlılar (burası müşteriye göre değişebilir) Fiş Çıkartıldığında ilgili sarf fişininde çıkarılabilmesi sağlanmıştır.

TALEP : Carinin tahsil etmediğim çeklerinin TL Tutar bazında , cari hesap browserında görmek istiyorum.

TALEP : Yıl ortasında ya da yıl sonlarında ambarlarımızı saymak istiyoruz , bu işlem için stokların sıfırlanması gerekiyor ( ambar sayımı işimi çok uzatıyor ) .Not:( Seri lot ve stok yeri takibi olan ürünler hariç )

Blogs Slider

<p><strong>Muhasebe fişlerine endeks nasıl atanır?</strong></p> <p>Örnek 259 hesap parasal olmayan(borç) tipinde bir hesap olup 259.01 Verilen avanslar hesabı olarak tanımlandı.<br /> 21.02.2023 tarihinde 100.000,00 TL avans verildi. Borç kaydı yapıldı.<br /> 29.03.2023 tarihinde 150.000,00 TL avan

<p><span style="font-size:12pt"><span style="font-family:Aptos,sans-serif"><span style="font-family:Poppins">Başlık kısmında bulunan başlangıç tarihi için sorguda {:BEGDATE}, bitiş tarihi için de sorguda {:ENDDATE} ifadeleri kullanılmalıdır.</span></span></span></p>

<p>Satış ve Dağıtım faturası ile borçlandırılmış olan cari hesabın, ödemesini beklenen tarihten tolere edilebilecek zaman diliminin de dışında kalarak ödeme yapması veya ödeme yapmaması halinde cari hesabın ilgili kişisine e-Posta, mektup veya fax aracılığı ile uyarı gönderilmesi sistemidir.</p> <p

Yazı Parola Korumalıdır

<ul> <li><span style="font-size:12pt"><span style="font-family:Aptos,sans-serif"><strong>1 günlük e-Defter oluşturularak kontrol edilmelidir. Dosya boyutu 40 mb civarında olmalıdır.&nbsp;1 günlük defter oluşturulup kilitleniyor mu incelenmelidir. Eğer önceki aydaki defter dosyasının üzerinde sağ tı

İletişim


Talep ve görüşleriniz için formu doldurabilir ya da www.dgn-yazilim.com üzerinden iletişime geçebilirsiniz.

DGN YAZILIM VE DANIŞMANLIK

www.dgn-yazilim.com

Telefon: 0850 4415 346


Benimle herhangi bir konuda iletişime geçmek için formu doldurabilirsiniz. En kısa sürede geri dönüş yapacağım.