2016-12-05 7 views
0

Ich plane, die Codes unten für meine Web-API-Sicherheit zu verwenden, aber ich bin mir nicht sicher, ob das genug sichere und logische Weg ist. Ich möchte nicht OWIN und AspNet.Identity verwenden, weil es für mich sehr kompliziert ist und ich nicht vollständig verstehe und ich nicht weiß, wie ich DB-Tabellen, Benutzerrollen usw. besonders anpasse. Aber mein Weg ist einfach und sehr anpassbar für mich.Token-Autorisierung ohne Identität

Dies ist CustomAuthorizeAttribute;

public class CustomAuthorize : AuthorizeAttribute 
{ 
    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     if ((actionContext.Request.Headers.GetValues("Host").FirstOrDefault().Contains("localhost:15742"))) 
     { 
      IEnumerable<string> access_token; 
      if (actionContext.Request.Headers.TryGetValues("Authorization", out access_token)) 
      { 
       var user = GetUserByToken(access_token); 
       if (user!=null && !user.TokenIsExpired) 
       { 
        HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom " + access_token.FirstOrDefault()); 
        return; 
       } 
       else 
       { 
        actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); 
        HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom"); 
        return; 
       } 
      } 
      else 
      { 
       actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); 
      } 
     } 
     else 
     { 
      actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden); 
     } 
    } 
} 

Und das ist Frontend

<script type="text/javascript"> 
    $(function() { 
     var access_token = $.cookie('access_token'); 
     if (access_token == undefined) { 
      $.cookie('access_token', 'test-token'); 
     } 


     $.ajax({ 
      url: '/api/account', 
      headers: { access_token: access_token }, 
      success: function (data) { 
       document.write(data.name + " " + data.lastname); 
      } 
     }); 
    }); 
</script> 

Durch die Art und Weise unter Verwendung von i etwa für mein Englisch bedaure. Ich hoffe, Sie verstehen mein Problem und ich warte auf Ihre Vorschläge.

+0

meine Antwort-Check: http://stackoverflow.com/questions/40281050/jwt-authentication-for-asp-net-web-api/40284152#40284152 –

+0

Es macht mir Angst, wenn Menschen bauen aufgrund mangelnder Kenntnisse/falscher Annahmen selbst etwas auf und wollen keine Zeit in das Lernen als Rahmen investieren, von dem sie abhängen. Alles scheint auf den ersten Blick kompliziert. Ein bisschen tauchen und lernen. Außerdem müssen Sie keine db für die Token-Authentifizierung verwenden. Bitte lesen Sie dies und versuchen Sie es zumindest: https://offering.solutions/articles/asp-net/token-authentication-with-claims-and-asp-net-webapi/ –

+0

der Link ist kaputt oder Website down –

Antwort

0

Ich würde vorschlagen, Sie investieren Zeit in einen richtigen Weg, um diese Dinge zu tun. Es gibt einen Grund, warum Bibliotheken verwendet werden, und das ist, um sicherzustellen, dass Sie nichts erstellen, was einfach zu hacken ist. Sicherheit ist für solche Dinge von größter Bedeutung.

Ich habe zufällig einen ausführlichen Artikel zu diesem Thema und ich hoffe, es kann Ihnen helfen, ein bisschen mehr über dieses Thema zu verstehen. Machen Sie auf jeden Fall Ihre eigenen Recherchen, finden Sie andere Ressourcen, schauen Sie sich zum Beispiel Claims an, aber versuchen Sie nicht, diese Dinge zu verkürzen, da Sie mit etwas enden werden, das überhaupt nicht sicher ist.

Hoffentlich hilft: https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/