SORU
13 HAZİRAN 2012, ÇARŞAMBA


ASP.NET Web API kimlik Doğrulama

ASP.NET Web API kullanırken istemci uygulamasından bir kullanıcının kimliğini doğrulamak için arıyorum. Sitedeki tüm videoları izledim ve aynı zamanda this forum post okuyun.

[Authorize] öznitelik koyarak doğru 401 Unauthorized durumu döndürür. Ancak, bir kullanıcı API giriş yapmak için izin vermek için nasıl bilmek istiyorum.

API için bir Android uygulaması kullanıcı kimlik bilgilerini girin, kullanıcı oturum ve sonraki tüm API çağrıları önceden tasdik etmek istiyorum.

CEVAP
13 HAZİRAN 2012, ÇARŞAMBA


bir kullanıcı oturum açmak için API sağlar

Bu istekle birlikte geçerli Form kimlik Doğrulama tanımlama bilgisi göndermek gerekiyor. Bu tanımlama genellikle[FormsAuthentication.SetAuthCookie yöntem (MSDN) çağırarak kimlik doğrulama zaman sunucusu (LogOn eylem) tarafından gönderilir.

İstemci 2 adımları gerçekleştirmek gerekir:

  1. Kullanıcı adı ve şifre göndererek LogOn bir eylem için bir HTTP isteği gönderin. Sırayla bu eylem yanıt, forms kimlik doğrulaması tanımlama bilgisi ayarlamak FormsAuthentication.SetAuthCookie yöntemi, kimlik bilgileri geçerli durumda) arar.
  2. İlk isteği içinde alınan formlar kimlik doğrulama tanımlama birini göndereceğim tarafından [Authorize] korunan bir eylem, bir HTTP isteği göndermek.

Bir örnek verelim. 2 API denetleyicileri web uygulamanızda: tanımlı olduğunu varsayalım

İlk bir kimlik doğrulama işlemek için sorumlu:

public class AccountController : ApiController
{
    public bool Post(LogOnModel model)
    {
        if (model.Username == "john" && model.Password == "secret")
        {
            FormsAuthentication.SetAuthCookie(model.Username, false);
            return true;
        }

        return false;
    }
}

ve ikincisi korumalı eylemleri içeren yetkili kullanıcıların görebileceği tek:

[Authorize]
public class UsersController : ApiController
{
    public string Get()
    {
        return "This is a top secret material that only authorized users can see";
    }
}

Şimdi istemci uygulaması bir alıcı bu API yazabiliriz. İşte önemsiz bir uygulama örneği (Microsoft.AspNet.WebApi.Client Microsoft.Net.Http NuGet paketleri yüklü olduğundan emin olun) konsol:

using System;
using System.Net.Http;
using System.Threading;

class Program
{
    static void Main()
    {
        using (var httpClient = new HttpClient())
        {
            var response = httpClient.PostAsJsonAsync(
                "http://localhost:26845/api/account", 
                new { username = "john", password = "secret" }, 
                CancellationToken.None
            ).Result;
            response.EnsureSuccessStatusCode();

            bool success = response.Content.ReadAsAsync<bool>().Result;
            if (success)
            {
                var secret = httpClient.GetStringAsync("http://localhost:26845/api/users");
                Console.WriteLine(secret.Result);
            }
            else
            {
                Console.WriteLine("Sorry you provided wrong credentials");
            }
        }
    }
}

Ve burada 2 HTTP istekleri Tel bak:

Talep kimlik doğrulaması:

POST /api/account HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: localhost:26845
Content-Length: 39
Connection: Keep-Alive

{"username":"john","password":"secret"}

Kimlik doğrulama yanıtı:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 13 Jun 2012 13:24:41 GMT
X-AspNet-Version: 4.0.30319
Set-Cookie: .ASPXAUTH=REMOVED FOR BREVITY; path=/; HttpOnly
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: application/json; charset=utf-8
Content-Length: 4
Connection: Close

true

İstek için korumalı veri:

GET /api/users HTTP/1.1
Host: localhost:26845
Cookie: .ASPXAUTH=REMOVED FOR BREVITY

Korumalı veri için yanıt:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 13 Jun 2012 13:24:41 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: application/json; charset=utf-8
Content-Length: 66
Connection: Close

"This is a top secret material that only authorized users can see"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HTC

    HTC

    12 Ocak 2006
  • Kap Slap

    Kap Slap

    8 Mart 2010
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011