Share via


ClaimTypes Clase

Definición

Representa los tipos predefinidos de notificaciones que una entidad puede exigir. Esta clase no puede heredarse.

public ref class ClaimTypes abstract sealed
public static class ClaimTypes
type ClaimTypes = class
Public Class ClaimTypes
Herencia
ClaimTypes

Ejemplos


using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using System.IdentityModel.Claims;
using System.IdentityModel.Policy;
using System.IdentityModel.Tokens;
using System.IdentityModel.Selectors;
using System.ServiceModel;

namespace Microsoft.ServiceModel.Samples.SupportingTokens
{
    [ServiceContract]
    public interface IEchoService : IDisposable
    {
        [OperationContract]
        string Echo();
    }
    // Service class that implements the service contract.
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    public class EchoService : IEchoService
    {
        public string Echo()
        {
            string userName;
            string certificateSubjectName;
            GetCallerIdentities(OperationContext.Current.ServiceSecurityContext, out userName, out certificateSubjectName);
            return String.Format("Hello {0}, {1}", userName, certificateSubjectName);
        }

        public void Dispose()
        {
        }

        bool TryGetClaimValue<TClaimResource>(ClaimSet claimSet, string claimType, out TClaimResource resourceValue)
            where TClaimResource : class
        {
            resourceValue = default(TClaimResource);
            IEnumerable<Claim> matchingClaims = claimSet.FindClaims(claimType, Rights.PossessProperty);
            if (matchingClaims == null)
                return false;
            IEnumerator<Claim> enumerator = matchingClaims.GetEnumerator();
            if (enumerator.MoveNext())
            {
                resourceValue = (enumerator.Current.Resource == null) ? null : (enumerator.Current.Resource as TClaimResource);
                return true;
            }
            else
            {
                return false;
            }
        }

        // Returns the username and certificate subject name provided by the client.
        void GetCallerIdentities(ServiceSecurityContext callerSecurityContext, out string userName, out string certificateSubjectName)
        {
            userName = null;
            certificateSubjectName = null;

            // Look in all the claimsets in the authorization context.
            foreach (ClaimSet claimSet in callerSecurityContext.AuthorizationContext.ClaimSets)
            {
                // Try to find a Upn claim. This has been generated from the windows username.
                string tmpName;
                if (TryGetClaimValue<string>(claimSet, ClaimTypes.Upn, out tmpName))
                {
                    userName = tmpName;
                }
                else
                {
                    // Try to find an X500DistinguishedName claim. This has been generated from the client certificate.
                    X500DistinguishedName tmpDistinguishedName;
                    if (TryGetClaimValue<X500DistinguishedName>(claimSet, ClaimTypes.X500DistinguishedName, out tmpDistinguishedName))
                    {
                        certificateSubjectName = tmpDistinguishedName.Name;
                    }
                }
            }
        }
    }
}
Imports System.Collections.Generic
Imports System.Security.Cryptography.X509Certificates
Imports System.IdentityModel.Claims
Imports System.IdentityModel.Policy
Imports System.IdentityModel.Tokens
Imports System.IdentityModel.Selectors
Imports System.ServiceModel


' Service class that implements the service contract.
<ServiceBehavior(IncludeExceptionDetailInFaults:=True)> _
Public Class EchoService
    Implements IEchoService
    <ServiceContract()> _
    Public Interface IEchoService
        : Inherits IDisposable
        <OperationContract()> _
        Function Echo() As String
    End Interface 'IEchoService

    Public Function Echo() As String Implements IEchoService.Echo
        Dim userName As String = String.Empty
        Dim certificateSubjectName As String = String.Empty
        GetCallerIdentities(OperationContext.Current.ServiceSecurityContext, userName, certificateSubjectName)
        Return String.Format("Hello {0}, {1}", userName, certificateSubjectName)

    End Function 'Echo


    Public Sub Dispose() Implements IDisposable.Dispose

    End Sub


    

    Function TryGetClaimValue(Of TClaimResource)(ByVal claimSet As ClaimSet, ByVal claimType As String, ByRef resourceValue As TClaimResource) As Boolean
        Dim matchingClaims As IEnumerable(Of Claim) = claimSet.FindClaims(claimType, Rights.PossessProperty)
        If matchingClaims Is Nothing Then
            Return False
        End If
        Dim enumerator As IEnumerator(Of Claim) = matchingClaims.GetEnumerator()
        If enumerator.MoveNext() Then
            If enumerator.Current.Resource Is Nothing Then
                resourceValue = Nothing
            Else
                resourceValue = CType(enumerator.Current.Resource, TClaimResource)
            End If
            Return True
        Else
            Return False
        End If
    End Function
    Sub GetCallerIdentities(ByVal callerSecurityContext As ServiceSecurityContext, ByRef userName As String, ByRef certificateSubjectName As String)
        ' Returns the username and certificate subject name provided by the client.

        userName = Nothing
        certificateSubjectName = Nothing

        ' Look in all the claimsets in the authorization context.
        Dim claimSet As ClaimSet
        For Each claimSet In callerSecurityContext.AuthorizationContext.ClaimSets
            ' Try to find a Upn claim. This has been generated from the Windows username.
            Dim tmpName As String = String.Empty
            If TryGetClaimValue(Of String)(claimSet, ClaimTypes.Upn, tmpName) Then
                userName = tmpName
            Else
                ' Try to find an X500DistinguishedName claim. This has been generated from the client certificate.
                Dim tmpDistinguishedName As X500DistinguishedName = Nothing
                If TryGetClaimValue(Of X500DistinguishedName)(claimSet, ClaimTypes.X500DistinguishedName, tmpDistinguishedName) Then
                    certificateSubjectName = tmpDistinguishedName.Name
                End If
            End If
        Next claimSet

    End Sub
End Class

Comentarios

Utilice la clase ClaimTypes para buscar un tipo determinado de notificación en ClaimSet o para crear una notificación. Para buscar un tipo determinado de notificación en ClaimSet, utilice el método FindClaims(String, String) y utilice las propiedades de esta clase para especificar el tipo de notificación para el parámetro claimType. Cuando el constructor de la clase Claim se utiliza para crear una nueva notificación, utilice las propiedades de la clase ClaimTypes para especificar el parámetro claimType. Para muchos de los tipos de notificación, la clase Claim tiene propiedades estáticas que devuelven notificaciones de un tipo específico. Por ejemplo, el método CreateHashClaim(Byte[]) devuelve una notificación utilizando el tipo de notificación Hash.

Propiedades

Anonymous

Obtiene el URI para una notificación que especifica el usuario anónimo.

Authentication

Obtiene el URI para una notificación que especifica los detalles sobre si una identidad está autenticada.

AuthorizationDecision

Obtiene el URI para una notificación que especifica una decisión de autorización sobre una entidad.

Country

Obtiene el URI para una notificación que especifica el país/región donde reside una entidad.

DateOfBirth

Obtiene el URI para una notificación que especifica la fecha de nacimiento de una entidad.

DenyOnlySid

Obtiene el URI para una notificación que especifica un identificador de seguridad (SID) de sólo denegación para una entidad.

Dns

Obtiene el URI de una notificación que especifica el nombre DNS asociado al nombre del equipo o al nombre alternativo del asunto o del emisor de un certificado X.509.

Email

Obtiene el URI para una notificación que especifica la dirección de correo electrónico de una entidad.

Gender

Obtiene el URI para una notificación que especifica el sexo de una entidad.

GivenName

Obtiene el URI para una notificación que especifica el nombre propio de una entidad.

Hash

Obtiene el URI para una notificación que especifica un valor hash.

HomePhone

Obtiene el URI para una notificación que especifica el número de teléfono particular de una entidad.

Locality

Obtiene el URI para una notificación que especifica la configuración regional donde reside una entidad.

MobilePhone

Obtiene el URI para una notificación que especifica el número de teléfono móvil de una entidad.

Name

Obtiene el URI para una notificación que especifica el nombre de una entidad.

NameIdentifier

Obtiene el URI para una notificación que especifica el nombre de una entidad.

OtherPhone

Obtiene el URI para una notificación que especifica el número de teléfono alternativo de una entidad.

PostalCode

Obtiene el URI para una notificación que especifica el código postal de una entidad.

PPID

Obtiene el URI para una notificación que especifica el identificador personal privado (PPI) de una entidad.

Rsa

Obtiene el URI para una notificación que especifica una clave RSA.

Sid

Obtiene el URI para una notificación que especifica un identificador de seguridad (SID).

Spn

Obtiene el URI para una notificación que especifica una notificación de nombre de entidad de seguridad de servicio (SPN).

StateOrProvince

Obtiene el URI para una notificación que especifica el estado o provincia donde reside una entidad.

StreetAddress

Obtiene el URI para una notificación que especifica la dirección de una entidad.

Surname

Obtiene el URI para una notificación que especifica el apellido de una entidad.

System

Obtiene el URI para una notificación que identifica la entidad del sistema.

Thumbprint

Obtiene el URI para una notificación que especifica una huella digital.

Upn

Obtiene el URI para una notificación que especifica un nombre principal de usuario (UPN).

Uri

Obtiene el URI para una notificación que especifica un URI.

Webpage

Obtiene el URI para una notificación que especifica la página Web de una entidad.

X500DistinguishedName

Obtiene la cadena que contiene el URI para una notificación del nombre distintivo (DN) de un certificado X.509.

Se aplica a