Aracılığıyla paylaş


Nasıl yapılır: Güvenlik Belirteci Hizmeti Oluşturma

Güvenlik belirteci hizmeti, WS-Trust belirtiminde tanımlanan protokolü uygular. Bu protokol, güvenlik belirteçlerini verme, yenileme, iptal etme ve doğrulama için ileti biçimlerini ve ileti değişim desenlerini tanımlar. Belirli bir güvenlik belirteci hizmeti bu özelliklerden birini veya daha fazlasını sağlar. Bu konuda en yaygın senaryoya bakılmaktadır: belirteç verme uygulama.

BelirteçLer Verme

WS-Trust, XML Şema tanım dili (XSD) şema öğesine ve RequestSecurityTokenResponse belirteç verme işlemi gerçekleştirmek için XSD şema öğesine göre RequestSecurityToken ileti biçimlerini tanımlar. Buna ek olarak, ilişkili Eylem Tekdüzen Kaynak Tanımlayıcılarını (URI) tanımlar. İletiyle ilişkili eylem URI'si RequestSecurityToken şeklindedir http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue. İletiyle ilişkili eylem URI'si RequestSecurityTokenResponse şeklindedir http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/Issue.

İstek İleti Yapısı

Sorun isteği ileti yapısı genellikle aşağıdaki öğelerden oluşur:

  • değerine sahip bir istek türü URI'si http://schemas.xmlsoap.org/ws/2005/02/trust/Issue.

  • Belirteç türü URI'si. Güvenlik Onayları Biçimlendirme Dili (SAML) 1.1 belirteçleri için bu URI'nin değeri olur http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1.

  • Verilen belirteçle ilişkilendirilecek anahtardaki bit sayısını gösteren anahtar boyutu değeri.

  • Anahtar türü URI'sı. Simetrik anahtarlar için bu URI'nin değeri olur http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey.

Buna ek olarak, birkaç başka öğe de mevcut olabilir:

  • İstemci tarafından sağlanan anahtar malzeme.

  • Verilen belirtecin birlikte kullanılacağı hedef hizmeti gösteren kapsam bilgileri.

Güvenlik belirteci hizmeti, Sorun Yanıtı iletisini oluştururken sorun isteği iletisindeki bilgileri kullanır.

Yanıt İleti yapısı

Sorun yanıtı ileti yapısı genellikle aşağıdaki öğelerden oluşur;

  • Verilen güvenlik belirteci, örneğin SAML 1.1 onayı.

  • Güvenlik belirteci ile ilişkili bir kanıt belirteci. Simetrik anahtarlar için bu genellikle anahtar malzemesinin şifrelenmiş bir biçimidir.

  • Verilen güvenlik belirtecine başvurular. Genellikle, güvenlik belirteci hizmeti, verilen belirteç istemci tarafından gönderilen sonraki bir iletide göründüğünde ve belirteç sonraki iletilerde mevcut olmadığında kullanılabilecek bir başvuru döndürür.

Buna ek olarak, birkaç başka öğe de mevcut olabilir:

  • Güvenlik belirteci hizmeti tarafından sağlanan anahtar malzeme.

  • Paylaşılan anahtarı hesaplamak için gereken algoritma.

  • Verilen belirteç için yaşam süresi bilgileri.

İstek İletilerini İşleme

Güvenlik belirteci hizmeti, istek iletisinin çeşitli parçalarını inceleyerek ve isteği karşılayan bir belirteç yayımlayabilmesini sağlayarak sorun isteğini işler. Güvenlik belirteci hizmeti, belirteci oluşturulacak şekilde oluşturmadan önce aşağıdakileri belirlemelidir:

  • İstek gerçekten bir belirtecin verilmesini isteyen bir istektir.

  • Güvenlik belirteci hizmeti istenen belirteç türünü destekler.

  • İstekte bulunan, isteği yapma yetkisine sahip.

  • Güvenlik belirteci hizmeti, anahtar malzemeyle ilgili olarak istekte bulunanın beklentilerini karşılayabilir.

Belirteç oluşturmanın iki önemli parçası, belirtecin hangi anahtarla imzalanması ve paylaşılan anahtarın şifrelenmesi için hangi anahtarla belirleniyor. İstemci belirteci hedef hizmete sunduğunda, bu hizmetin belirtecin güvendiği bir güvenlik belirteci hizmeti tarafından verildiğini belirleyebilmesi için belirtecin imzalanması gerekir. Anahtar malzemenin, hedef hizmetin bu anahtar malzemenin şifresini çözebileceği şekilde şifrelenmesi gerekir.

SAML onaylama işlemini imzalamak, örnek SigningCredentials oluşturmayı içerir. Bu sınıf için oluşturucu aşağıdakileri alır:

  • SecurityKey SAML onayını imzalamak için kullanılacak anahtar için bir.

  • Kullanılacak imza algoritmasını tanımlayan bir dize.

  • Kullanılacak özet algoritmasını tanımlayan bir dize.

  • İsteğe bağlı olarak, onay imzalamak için kullanılacak anahtarı tanımlayan bir SecurityKeyIdentifier .

void AddSigningCredentials(SamlAssertion assertion, SecurityKey signingKey)
{
    SigningCredentials sc = new SigningCredentials(signingKey,
        SecurityAlgorithms.RsaSha1Signature, SecurityAlgorithms.Sha1Digest);
    assertion.SigningCredentials = sc;
}
Sub AddSigningCredentials(ByVal assertion As SamlAssertion, _
    ByVal signingKey As SecurityKey)
    Dim sc As New SigningCredentials(signingKey, _
    SecurityAlgorithms.RsaSha1Signature, SecurityAlgorithms.Sha1Digest)
    assertion.SigningCredentials = sc

End Sub

Paylaşılan anahtarı şifrelemek için anahtar malzemesinin alınması ve hedef hizmetin paylaşılan anahtarın şifresini çözmek için kullanabileceği bir anahtarla şifrelenmesi gerekir. Genellikle hedef hizmetin ortak anahtarı kullanılır.

byte[] EncryptKey(byte[] plainTextKey, SecurityKey encryptingKey)
{
    return encryptingKey.EncryptKey(SecurityAlgorithms.RsaOaepKeyWrap, plainTextKey);
}
Function EncryptKey(ByVal plainTextKey() As Byte, _
        ByVal encryptingKey As SecurityKey) As Byte()
    Return encryptingKey.EncryptKey(SecurityAlgorithms.RsaOaepKeyWrap, plainTextKey)
End Function

Buna ek olarak, şifrelenmiş anahtar için bir SecurityKeyIdentifier gereklidir.

SecurityKeyIdentifier GetKeyIdentifierForEncryptedKey(byte[] encryptedKey,
    SecurityToken encryptingToken)
{
    SecurityKeyIdentifier encryptingKeyIdentifier = new SecurityKeyIdentifier(encryptingToken.CreateKeyIdentifierClause<X509ThumbprintKeyIdentifierClause>());
    return new SecurityKeyIdentifier(new EncryptedKeyIdentifierClause(encryptedKey, SecurityAlgorithms.RsaOaepKeyWrap, encryptingKeyIdentifier));
}
Function GetKeyIdentifierForEncryptedKey(ByVal encryptedKey() _
 As Byte, ByVal encryptingToken As SecurityToken) _
    As SecurityKeyIdentifier
    Dim encryptingKeyIdentifier As New SecurityKeyIdentifier( _
        encryptingToken.CreateKeyIdentifierClause(Of X509ThumbprintKeyIdentifierClause)())
    Return New SecurityKeyIdentifier(New EncryptedKeyIdentifierClause( _
        encryptedKey, SecurityAlgorithms.RsaOaepKeyWrap, encryptingKeyIdentifier))
End Function

Bu SecurityKeyIdentifier daha sonra öğesinin SamlTokenbir SamlSubject parçası olarak oluşturmak için kullanılır.

SamlSubject CreateSamlSubjectForProofKey(SecurityKeyIdentifier proofKeyIdentifier)
{
    List<string> confirmations = new List<string>();

    confirmations.Add("urn:oasis:names:tc:SAML:1.0:cm:holder-of-key");

    return new SamlSubject(null, null, "IssuerName", confirmations, null, proofKeyIdentifier);
}
Function CreateSamlSubjectForProofKey( _
    ByVal proofKeyIdentifier As SecurityKeyIdentifier) As SamlSubject
    Dim confirmations As List(Of String) = New List(Of String)()
    confirmations.Add("urn:oasis:names:tc:SAML:1.0:cm:holder-of-key")
    Return New SamlSubject(Nothing, Nothing, "IssuerName", _
        confirmations, Nothing, proofKeyIdentifier)
End Function

Daha fazla bilgi için bkz . Federasyon Örneği.

Yanıt İletileri Oluşturma

Güvenlik belirteci hizmeti, sorun isteğini işlediğinde ve sağlama anahtarıyla birlikte verileceği belirteci yapılandırdıktan sonra, yanıt iletisinin en azından istenen belirteç, kanıt belirteci ve verilen belirteç başvuruları dahil olmak üzere yapılandırılması gerekir. Verilen belirteç genellikle aşağıdaki örnekte gösterildiği gibi dosyasından SamlAssertionoluşturulmuşturSamlSecurityToken.

SecurityToken CreateIssuedToken(SamlAssertion assertion)
{
    return new SamlSecurityToken(assertion);
}
Function CreateIssuedToken(ByVal assertion As SamlAssertion) As SecurityToken
    Return New SamlSecurityToken(assertion)
End Function

Güvenlik belirteci hizmetinin paylaşılan anahtar malzemesini sağladığı durumlarda, kanıt belirteci bir BinarySecretSecurityTokenoluşturularak oluşturulur.

BinarySecretSecurityToken CreateProofToken(byte[] proofKey)
{
    return new BinarySecretSecurityToken(proofKey);
}
Function CreateProofToken(ByVal proofKey() As Byte) As BinarySecretSecurityToken
    Return New BinarySecretSecurityToken(proofKey)

End Function

İstemci ve güvenlik belirteci hizmeti paylaşılan anahtar için anahtar malzemesi sağladığında kanıt belirtecini oluşturma hakkında daha fazla bilgi için bkz . Federasyon Örneği.

Verilen belirteç başvuruları sınıfının örnekleri SecurityKeyIdentifierClause oluşturularak oluşturulur.

SecurityKeyIdentifierClause CreateTokenReference(SamlSecurityToken token)
{
    return token.CreateKeyIdentifierClause<SamlAssertionKeyIdentifierClause>();
}
Function CreateTokenReference(ByVal token As SamlSecurityToken) _
    As SecurityKeyIdentifierClause
    Return token.CreateKeyIdentifierClause( _
    Of SamlAssertionKeyIdentifierClause)()
End Function

Bu çeşitli değerler daha sonra istemciye döndürülen yanıt iletisinde serileştirilir.

Örnek

Güvenlik belirteci hizmetinin tam kodu için bkz . Federasyon Örneği.

Ayrıca bkz.