WCF Token Based Authentication, Kullanıcı Şifre İle Login, Kimlik Doğrulama

  1. wolf
    8
    230
    20.06.2019 15:35:00

    WCF de güvenlik için username password ile login olan ve Token Based Authentication yöntemini kullanan bir örneğe ihtiyacım var, kimlik doğrulama işlemini eklemem lazım wcf servisime ancak diğer sitelere baktım, örnekler çok karışık, basitçe bir kimlik doğrulamaya, token ile bir örnek verebilir misiniz ?

    wcf .net 2 ay önce 376 Görüntüleme

( 1 ) Cevap

  1. koraydrk
    7
    2060
    20.06.2019 16:27:00

    WCF Tarafı

    Öncelikle bir WCF projesi oluşturalım ve kodları aşağıdaki gibi hazırlayalım ;

    IService1

    using System.ServiceModel;
    
    namespace TestWcf
    {
        [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            string GetData(int value);
    
            [OperationContract]
            string UserLogin(string userName, string password);
        }
    }
    

    Service1

    using System; using System.Linq; using System.ServiceModel;

    namespace TestWcf
    {
        public class Service1 : IService1
        {
            static string Token = string.Empty;
            public string GetData(int value)
            {
                if (IsValidateUser())
                {
                    return string.Format("You entered: {0}", value);
                }
                else
                {
                    return "Invalid User Token.";
                }
            }
    
            public string UserLogin(string userName, string password)
            {
                if (userName == "replyfeed" && password == "12345")
                {
                    //token oluşturma
                    byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
                    byte[] key = Guid.NewGuid().ToByteArray();
                    Token = Convert.ToBase64String(time.Concat(key).ToArray());
                }
                else
                {
                    Token = "";
                    return "-";
                }
                return Token;
            }
    
            public bool IsValidateUser()
            {
                if (OperationContext.Current.IncomingMessageHeaders.FindHeader("TokenHeader", "TokenNameSpace") == -1)
                {
                    return false;
                }
    
                string userIdentityToken = Convert.ToString(OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("TokenHeader", "TokenNameSpace"));
    
                //mevcut token ile client dan gelen token karşılaştırması
                if (userIdentityToken == Token)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
    }
    

    Client Tarafı

    Bir console uygulaması açalım, add service reference dan, yukarıda yazdığımız servisi ekleyelim, servis debug modda da olsa çalışıyor olması lazım yanlız.

    Ardından eklediğimiz servisin login metodunu çağırıp token aldıktan sonra, servisin GetData() metodunu çağıralım ;

    using System;
    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using WcfClient.ServiceReference1;
    
    
    namespace WcfClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    MessageHeader messageHeader;
                    OperationContextScope operationContextScope;
    
                    Service1Client service1Client = new Service1Client();
                    string userToken = service1Client.UserLogin("replyfeed2", "12345");
    
                    if (userToken.Length > 1)
                    {
                        operationContextScope = new OperationContextScope(service1Client.InnerChannel);
                        messageHeader = MessageHeader.CreateHeader("TokenHeader", "TokenNameSpace", userToken);
                        OperationContext.Current.OutgoingMessageHeaders.Add(messageHeader);
    
                        var data = service1Client.GetData(99);
                        Console.WriteLine(data);
                    }
    
                    Console.ReadLine();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
        }
    }
    

    Bu kadar, şimdi test edelim ;

    wcf-token-based-authentication-wcf-kimlik-dogrulama-login

Cevabınız