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
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:
- 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 ayarlamakFormsAuthentication.SetAuthCookie
yöntemi, kimlik bilgileri geçerli durumda) arar. - İ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"
Dinlendirici bir API için kimlik Doğru...
github: kimlik doğrulama yöntemleri ku...
kimlik doğrulama nodejs pasaport token...
Nasıl insanlar Gidip kimlik doğrulama ...
Neden AuthorizeAttribute kimlik doğrul...