none
WEB API Token Based Authentication RRS feed

  • Genel Tartışma

  • Merhaba,
    web api projemde token based authentication kullaniyorum. 
    192.168.xx.xx/token adresine :
    grant_type=password,
    username=xxx,
    password=xxx bilgilerimi girerek access_token aliyorum. Sorum su:

    Bu uye bilgilerini diger controllerlerde nasil alabilirim?
    mesela veritabanina insert yapmak istedigimde Uye.Uname=username, Uye.Pwd=password  bu sekilde.
    Yani bu access tokeni kullanan uyenin uye bilgilerini insert yapmak istiyorum.

    Tesekkurler.



    26 Aralık 2017 Salı 08:20

Tüm Yanıtlar

  • Deleted
    26 Aralık 2017 Salı 08:43
  • ApiController sınıfından miras alan X isimli bir sınıf oluşturursun. Auth. bilgilerine ulaşmak istediğin sınıfların tamamı bu X sınıfından türer. Ve X sınıfı içinde UserId, UserName gibi authentication bilgilerini kontrol ederken tuttuğun bilgileri saklayan birkaç property eklersin ve bu sınıfın constructor'ında claims bilgilerini okursun. Bu durumda X sınıfından türeyen her sınıf bu bilglere ulaşabilir.

    //X sınıfı:
    public class MyBase: ApiController
        {
            public string UserName { get; set; }
            public int CurrentSessionID { get; set; }
            
            public MyBase()
            {
                ReadAuthenticationProperties();
            }
            public virtual void ReadAuthenticationProperties()
            {
                var identity = User.Identity as ClaimsIdentity;
                var claims = (from session in identity.Claims
                              select new
                              {
                                  type = session.Type,
                                  value = session.Value,
                                  subject = session.Subject.Name,
                              }).ToList();
    
                int id;
                bool convert = int.TryParse(claims[0].value, out id);
                CurrentSessionID = id;
                UserName = claims[1].value;
            }
        }
    MyBase sınıfından türeyen tüm denetimci sınıflar artık UserName ve CurrentSessionId isimli auth. bilgilerini kullanabilir.

     public class Controller1: MyBase
        {
     [Route("path")]
            [ResponseType(typeof(List<string>))]
            public IHttpActionResult Method()
            {
               //CurrentSessionId
    //UserName
            }
        }


    try { OldugunGibiGorun(); } catch (BeceremedimException) { GorundugunGibiOl(); }


    Dediginiz gibi yaptigimda, UserName veritabanina user olarak kaydediliyor.
    Benim istedigim token alirken kullandigim usernamein kaydolmasi.

    Tesekkurler


    26 Aralık 2017 Salı 10:38
  • Deleted
    26 Aralık 2017 Salı 12:11
  •                 var identity = new ClaimsIdentity(context.Options.AuthenticationType);

                    identity.AddClaim(new Claim("sub", context.UserName));
                    identity.AddClaim(new Claim("role", "user"));

                    context.Validated(identity);

    Burdaki UserName'e diger controller'lerden nasil ulasabilirm?

    26 Aralık 2017 Salı 12:30
  • Deleted
    26 Aralık 2017 Salı 21:57
  • Deleted
    27 Aralık 2017 Çarşamba 10:20
  •   identity.AddClaim(new Claim(ClaimsTypes.Name, context.UserName));
                

    Kodlarını incelemedim.

    ClaimTypes.Name olarak kaydetmeyi dendin mi?



    try { OldugunGibiGorun(); } catch (BeceremedimException) { GorundugunGibiOl(); }

    Tesekkur ederim cevaplariniz icin, gozden kacirdigim hata yapiyormusum, 

     identity.AddClaim(new Claim(ClaimsTypes.Name, context.UserName));

    seklinde yaptim ve
     var identity = (ClaimsIdentity)User.Identity;
    tbl.UserName=identity.Name; seklinde yaptigimda istedigim oldu.

    Tesekkurler.

    27 Aralık 2017 Çarşamba 13:13