2013-09-26 34 views
5

Kullanıcıları bir WCF hizmetinde doğrulamak/yetkilendirmek için bir yol bulmalıyım. Kullanıcıların kimlik bilgilerini saklayan bir harici kimlik doğrulama servisi kullanıyorum.WCF Kullanıcı Kimlik Doğrulama ve Yetkilendirme

Ör. "Bob bizim loginmethod'u kullanıyor, kimlik bilgilerini kimlik doğrulama servisine gönderiyoruz, servis bu kimlik bilgilerinin doğru olup olmadığını bize bildirir." Eğer Bob başka bir istek gönderirse, Bob'un önceden doğrulanmış olup olmadığını bilmemiz gerekir.

Artık istemcide bir oturum oluşturuluyor, ancak sunucu tarafına taşınması gerekiyor. Güvenlik için müşterilere güvenemeyiz.

Bu, güvenlik çerezleri kullanılarak çözülebilir veya daha iyi bir öneriniz var mı?

EDIT! Sadece kimlik doğrulama sunucusu kullanabilirsiniz ve sizin tarif edilmektedir sorun (en azından) iki standart çözümler vardı tanınmış biridir o

Overview

cevap

9

erişimi yok.

Federasyonu WS-güven

kullanılarak birinci seçenek WS-güven göre aktif federasyonu kullanan bir sabun bazlı biridir. Bu çözümde:

  • Müşteriniz
  • kimlik doğrulama hizmeti kimlik bilgilerini sağlar kimlik bilgileri geçerliyse, kimlik doğrulama hizmeti müşteriye imzalı (ve şifreli) belirteci döndürür. Kodun içerdiği herhangi bir bilginin gizli kalması için şifrelenir - müşteri bile okuyamaz. WCF hizmetinize ait bir ortak anahtarla şifrelenir. Kimlik doğrulama servisine ait özel bir anahtar ile imzalanır.
  • İstemci, imzalanmış/şifreli belirtecini WCF hizmetinize gönderir. Servis şifresini çözebilir çünkü şifre çözme için özel anahtarı tutar. Kimlik doğrulama hizmeti tarafından imzalandığından güvenebilir.
  • Şifresi çözülmüş belirtecin içeriğine bağlı olarak, hizmet istemci kimliğini oluşturabilir ve yetkilendirme kararı verebilir.
  • Bu modelde

, olağan terminoloji geçerli:

  • Kimlik doğrulama hizmeti Güvenlik Jetonu Servis
  • Kişisel WCF hizmeti Partiyi
  • müşteriniz edilir güvenerek olduğunu İstemci

Bu karmaşık görünüyor, ancak Windows Kimlik Vakfı'nı kullanarak .Net ve WCF'de çok iyi destekleniyor. Pek çok örneği vardır, bunların çoğu (belki hepsi) kod yerine WCF yapılandırmasıyla yapılabilir.

Bu, istemcilerin kripto yeteneğine (.Net istemcileriniz gibi) ve iyi çerçevelerin (WIF gibi) bulunduğu senaryolara uygundur. Tarayıcılar ve bazı telefonlar gibi düşük özellikli istemciler için veya istemcilerin kontrolünde olmadığınız yerlerde bu kadar iyi değildir.

Kuruluştan kuruluşa federasyon dahil olmak üzere kuruluş senaryolarında yaygın olarak kullanılır. İnternet senaryolarında daha az kullanılır. Bu standardize ve bu nedenle genelde iyi çerçeveler tarafından desteklenen

  • Bu sizin WCF hizmeti asla (= daha güvenli) müşteri kimlik bilgilerini
  • It işlemek için sahip olduğu anlamına gelir edilir

    • bunun

      güçlü yanları farklı kimlik doğrulama hizmetlerine geçişi oldukça kolaylaştırır (çünkü standartlaştırılmıştır).

      http://msdn.microsoft.com/en-us/magazine/ee335707.aspx

      Ve Google size çok daha fazla gösterecektir: Genel bakış burada bulabilirsiniz

    diğer bağımsız kimlik hizmetleri yapmak örneği, şirket içi AD ve Windows Azure AD için hem bu desteklemek örnekler ve örnekler. Bu çözümde OAuth 2

    kullanılarak

    Federasyonu:

    • istemci kimlik doğrulama servisi tarafından sağlanan bazı UI (genellikle bir web sayfası) görüntüler
    • Kullanıcı bu onların kimlik bilgilerini girer Kullanıcı Arabirimi ve kimlik doğrulama hizmeti doğrulanır ve sonuçta istemciye bir simge döndürür. Jetonun niteliği standartlaştırılmamıştır, ne de şifrelenmiş olup olmadığıdır. Genellikle en azından imzalanmış olacaktır.

      • Kimlik doğrulama hizmetidir:
      • istemci WCF hizmeti WCF hizmeti OAuth terminolojisinde önceki çözüm

      gibi belirteci doğrular

    • her isteği ile belirteci gönderir Yetkilendirme Sunucusu
    • WCF hizmetiniz Kaynak Sahibi
    • Müşteriniz bu karmaşık sesler Yine Müşteri

    , ama gayet iyi .NET desteklenmektedir. Muhtemelen şu anda WS-Trust yaklaşımı kadar iyi değil. Windows Azure AD tarafından ve istemci tarafında Windows Azure Kimlik Doğrulama Kitaplığı kullanılarak desteklenir. Diğer hizmetler bu yaklaşımı kullanabilir - ör. Facebook.

    Bu

    • Müşteriniz düşük özellikteki veya kripto özellikli olmadığı durumlarda iyi çalışır (örneğin bir tarayıcı ya da bazı telefonlar)
    • Sen müşteri kontrol etmiyoruz (örnüçüncü şahıs bir uygulama hizmetinize erişiyor)

    WCF servisinin sahibi olarak, kullanıcıları veya müşterileri mutlaka bilmemeniz gereken, çok yaygın bir şekilde internet uygulamasında kullanılır. Bazı yönlerden daha az eksiksiz bir standarttır (örneğin, kimlik doğrulamanın nasıl gerçekleştiğini tam olarak tanımlamaz) ve sonuç olarak, alternatif yetkilendirme sunucularına geçmek daha az kolaydır. Bunun

    güçlü şunlardır:

    • Daha basit ve bu nedenle bu popülaritesi artıyor
    • geniş bir platform desteği vardır ve bu nedenle kütüphane desteği her zaman daha iyi
    • kullanıcı asla oluyor sadece auth sunucusuna, sizin kullanıcı arayüzüne kimlik bilgilerini girer, yüzden
    • bir müşteriye verilen izinler kapsamını kontrol ve bu iptal yolunda inşa etti (internet senaryolarda) güvenilecek olasılığı daha yüksektir izinler, yani ag ain bir internet senaryosunda daha güvenilir olan bu resmi Net desteği Windows Azure AD Kimlik kütüphanede

    http://msdn.microsoft.com/en-us/library/windowsazure/jj573266.aspx

    diğer açık kaynak bileşenleri gibi, çok daha vardır DotNetOpenAuth

    http://dotnetopenauth.net/

    çözüm sizin için en iyi authent niteliğine etmesine bağlıdır olurdu hangisi ication servisi söyleyebilirim. Ve ister kurumsal isterse de internet senaryosundasınız. Auth ise. Hizmet, bir WS-Güven Güvenli Jeton Hizmeti (STS) olarak kolayca uyarlanabilir, bu iyi bir yol olacaktır. Ağa bazı web UI ekliyorsa. Servis mümkün, OAuth daha iyi olabilir.

    Veya, ne seçenek uygulanabilir olup olmadığını, sadece desenleri bir yaklaşım oluşturmak ve tam standart için gitmeden kullanan ödünç alabilir.

    İyi şanslar!

  • +0

    Bu ayrıntılı gönderi için teşekkür ederiz. Kimlik doğrulama sunucusuna erişimim olmadığını söylemeyi unuttum, sadece bunu kullanabilirim. Bu yüzden kendi tokensystem – David

    +0

    LOL, OK yapmaya çalışacağım. Dediğim gibi, kalıplar yararlı olmalı: o) –

    +0

    Çok üzgünüm kardeşim – David

    İlgili konular