RESTful Web Hizmetinin Kimliğini Doğrulama
HTTP, kaynaklara erişimi denetlemek için çeşitli kimlik doğrulama mekanizmalarının kullanılmasını destekler. Temel kimlik doğrulaması, kaynaklara yalnızca doğru kimlik bilgilerine sahip istemcilere erişim sağlar. Bu makalede, RESTful web hizmeti kaynaklarına erişimi korumak için temel kimlik doğrulamasının nasıl kullanılacağı gösterilmektedir.
Not
iOS 9 ve üzeri cihazlarda, App Transport Security (ATS), İnternet kaynakları (uygulamanın arka uç sunucusu gibi) ile uygulama arasında güvenli bağlantılar zorlayarak hassas bilgilerin yanlışlıkla açıklanmasını önler. iOS 9 için oluşturulan uygulamalarda ATS varsayılan olarak etkinleştirildiğinden, tüm bağlantılar ATS güvenlik gereksinimlerine tabi olacaktır. Bağlantılar bu gereksinimleri karşılamıyorsa, bir özel durumla başarısız olur.
İnternet kaynakları için protokolün ve güvenli iletişimin HTTPS
kullanılması mümkün değilse ATS devre dışı bırakılabilir. Bu, uygulamanın Info.plist dosyası güncelleştirilerek elde edilebilir. Daha fazla bilgi için bkz . Uygulama Aktarım Güvenliği.
HTTP üzerinden Kullanıcıların Kimliğini Doğrulama
Temel kimlik doğrulaması, HTTP tarafından desteklenen en basit kimlik doğrulama mekanizmasıdır ve istemcinin kullanıcı adı ve parolayı şifrelenmemiş base64 kodlanmış metin olarak göndermesini içerir. Aşağıdaki gibi çalışır:
- Bir web hizmeti korumalı bir kaynak için istek alırsa, isteği http durum kodu 401 (erişim reddedildi) ile reddeder ve aşağıdaki diyagramda gösterildiği gibi WWW-Authenticate yanıt üst bilgisini ayarlar:
- Web hizmeti korumalı bir kaynak için istek alırsa ve
Authorization
üst bilgisi doğru ayarlanmışsa, web hizmeti isteğin başarılı olduğunu ve istenen bilgilerin yanıtta olduğunu belirten 200 HTTP durum koduyla yanıt verir. Bu senaryo aşağıdaki diyagramda gösterilmiştir:
Not
Temel kimlik doğrulaması yalnızca bir HTTPS bağlantısı üzerinden kullanılmalıdır. HTTP bağlantısı üzerinden kullanıldığında, Authorization
HTTP trafiği bir saldırgan tarafından yakalanırsa üst bilgi kolayca çözülebilir.
Web İsteğinde Temel Kimlik Doğrulamasını Belirtme
Temel kimlik doğrulamasının kullanımı aşağıdaki gibi belirtilir:
- "Temel" dizesi isteğin
Authorization
üst bilgisine eklenir. - Kullanıcı adı ve parola, "username:password" biçiminde bir dize halinde birleştirilir. Bu, base64 kodlanır ve isteğin
Authorization
üst bilgisine eklenir.
Bu nedenle, 'XamarinUser' kullanıcı adı ve 'XamarinPassword' parolası ile üst bilgi şöyle olur:
Authorization: Basic WGFtYXJpblVzZXI6WGFtYXJpblBhc3N3b3Jk
HttpClient
sınıfı özelliğinde Authorization
HttpClient.DefaultRequestHeaders.Authorization
üst bilgi değerini ayarlayabilir. HttpClient
Örnek birden çok istekte bulunduğundan, Authorization
üst bilginin aşağıdaki kod örneğinde gösterildiği gibi her istekte bulunmak yerine yalnızca bir kez ayarlanması gerekir:
public class RestService : IRestService
{
HttpClient _client;
...
public RestService ()
{
var authData = string.Format ("{0}:{1}", Constants.Username, Constants.Password);
var authHeaderValue = Convert.ToBase64String (Encoding.UTF8.GetBytes (authData));
_client = new HttpClient ();
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("Basic", authHeaderValue);
}
...
}
Ardından bir web hizmeti işlemine istek yapıldığında istek üst bilgiyle Authorization
imzalanır ve kullanıcının işlemi çağırma izni olup olmadığını gösterir.
Önemli
Bu kod kimlik bilgilerini sabit olarak depolasa da, yayımlanmış bir uygulamada güvenli olmayan bir biçimde depolanmamalıdır.
Yetkilendirme Üst Bilgisi Sunucu Tarafı İşleniyor
REST hizmeti her eylemi özniteliğiyle [BasicAuthentication]
süslemelidir. Bu öznitelik, üst bilgiyi ayrıştırmak Authorization
ve base64 kodlanmış kimlik bilgilerinin geçerli olup olmadığını belirlemek için web.config dosyasında depolanan değerlerle karşılaştırılarak kullanılır. Bu yaklaşım örnek bir hizmet için uygun olsa da genel kullanıma yönelik bir web hizmeti için genişletme gerektirir.
IIS tarafından kullanılan temel kimlik doğrulama modülünde, kullanıcıların Windows kimlik bilgilerine göre kimlik doğrulaması yapılır. Bu nedenle, kullanıcıların sunucunun etki alanında hesapları olmalıdır. Ancak Temel kimlik doğrulama modeli, kullanıcı hesaplarının veritabanı gibi bir dış kaynakta kimlik doğrulamasının yapıldığı özel kimlik doğrulamasına izin verecek şekilde yapılandırılabilir. Daha fazla bilgi için ASP.NET web sitesindeki ASP.NET Web API'sinde Temel Kimlik Doğrulaması bölümüne bakın.
Not
Temel kimlik doğrulaması oturumu kapatmayı yönetmek için tasarlanmamıştır. Bu nedenle oturumu kapatmaya yönelik standart temel kimlik doğrulama yaklaşımı oturumu sonlandırmaktır.