Asp.net Web Api Token Based Authentication Nasıl Yapılır

  1. azizbaskan
    16
    582
    9/10/2018 2:12:00 PM

    Asp.net Web Api de token based authentication token temelli otantikasyon /güvenlik nasıl sağlarım ? Web apimin her bir servis metodunda bu güvenliği sağlamalıyım.

    asp.net-web-api 2 ay önce 523 Görüntüleme

( 1 ) Cevap

  1. deniz
    14
    2902
    9/11/2018 9:56:00 AM

    Microsoft’un Owin kütüphanesini kullanabilirsin.

    Adım adım bir örnek yapalım ,

    1) Gerekli dll leri nuget package managerdan yükleyelim

    Microsoft.AspNet.WebApi.Owin , Microsoft.Owin.Host.SystemWeb , Microsoft.Owin.Security.OAuth

    owin_nuget

    2) App_Start klasörüne sağ tıklayıp ,Add>>New Item , deyip bir owin startup classı ekliyoruz

    owin_starup_ekle

    3)eklediğimiz Owin Startup sınıfımız içini şu şekilde yazalım

    using System;
    using System.Web.Http;
    using ADS.TabletIntegrationApi;
    using ADS.TabletIntegrationApi.Security;
    using Microsoft.Owin;
    using Microsoft.Owin.Security.OAuth;
    using Owin;
    
    
    [assembly: OwinStartup(typeof(Startup))]
    
    namespace OwinTest
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                HttpConfiguration config = new HttpConfiguration();
                ConfigureOAuth(app);
    
                WebApiConfig.Register(config);
                app.UseWebApi(config);
    
            }
    
            public void ConfigureOAuth(IAppBuilder app)
            {
                OAuthAuthorizationServerOptions oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions();
                oAuthAuthorizationServerOptions.TokenEndpointPath = new Microsoft.Owin.PathString("/token");
                oAuthAuthorizationServerOptions.AccessTokenExpireTimeSpan = TimeSpan.FromDays(1);
                oAuthAuthorizationServerOptions.AllowInsecureHttp = true;
                oAuthAuthorizationServerOptions.Provider = new SimpleAuthorizationServerProvider();
    
    
                app.UseOAuthAuthorizationServer(oAuthAuthorizationServerOptions);
                app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    
            }
        }
    }
    

    4) 3. maddede yazdığımız startup ın içindeki SimpleAuthorizationServerProvider sınıfını yazıyoruz

    public class SimpleAuthorizationServerProvider:OAuthAuthorizationServerProvider
    {
        public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
        {
            context.Validated();
        }
    
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin",new []{"*"});
    
            if (context.UserName=="deniz"&&context.Password=="12345")
            {
                var identity = new ClaimsIdentity(context.Options.AuthenticationType);
                identity.AddClaim(new Claim("sub", context.UserName));
                identity.AddClaim(new Claim("sub","user"));
                context.Validated(identity);
            }
            else
            {
                context.SetError("invalid_grant","Username or password are invalid");
            }
        }
    
    }
    

    5) Son adımlar

    Bir test metodu yazalım , burada işin püf noktası şu , [Authorize] attribute u olan tüm metotlara , request atarken header da Authorization içinde aldığımız tokenı göndermedikçe erişemeyiz , yani toke ile güvenlik getirmek istediğimiz metotlara [Authorize] ı koyacağız.

        [HttpPost]
        [Authorize]
        public IHttpActionResult Test([FromBody]string s)
        {
            return Json(true);
        }
    

    Bir token alalım

    owin_token

    Şimdide aldığımız token ile metodumuza erişelim , tokenın başına bearer eklemeyi unutmayın

    owin_authorization

    Bu kadar , artık apinde token based authentication ı sağlamış oluyorsun.

Cevabınız