Partilhar via


ClaimTypes Classe

Definição

Representa os tipos predefinidos de declarações que uma entidade pode solicitar. Essa classe não pode ser herdada.

public ref class ClaimTypes abstract sealed
public static class ClaimTypes
type ClaimTypes = class
Public Class ClaimTypes
Herança
ClaimTypes

Exemplos


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

Comentários

Use a ClaimTypes classe para pesquisar um tipo específico de declaração em um ClaimSet ou para criar uma declaração. Para pesquisar um tipo específico de declaração em um ClaimSet, use o FindClaims(String, String) método e use as propriedades dessa classe para especificar o tipo de declaração para o claimType parâmetro . Quando o construtor da Claim classe for usado para criar uma nova declaração, use as propriedades da ClaimTypes classe para especificar o claimType parâmetro . Para muitos dos tipos de declaração, a Claim classe tem propriedades estáticas que retornam uma declaração de um tipo específico. Por exemplo, o CreateHashClaim(Byte[]) método retorna uma declaração usando o tipo de declaração Hash .

Propriedades

Anonymous

Obtém o URI de uma declaração que especifica o usuário anônimo.

Authentication

Obtém o URI para uma declaração que especifica os detalhes sobre se uma identidade é autenticada.

AuthorizationDecision

Obtém o URI para uma declaração que especifica uma decisão de autorização em uma entidade.

Country

Obtém o URI para uma declaração que especifica o país/região em que uma entidade reside.

DateOfBirth

Obtém o URI para uma declaração que especifica a data de nascimento de uma entidade.

DenyOnlySid

Obtém o URI para uma declaração que especifica um SID (identificador de segurança) exclusivamente de negação de uma entidade.

Dns

Obtém o URI para uma declaração que especifica o nome DNS associado com o nome do computador ou com o nome alternativo da entidade ou então do emissor de um certificado X.509.

Email

Obtém o URI para uma declaração que especifica o endereço de email de uma entidade.

Gender

Obtém o URI para uma declaração que especifica o gênero de uma entidade.

GivenName

Obtém o URI para uma declaração que especifica o nome dado de uma entidade.

Hash

Obtém o URI para uma declaração que especifica um valor de hash.

HomePhone

Obtém o URI para uma declaração que especifica o número de telefone residencial de uma entidade.

Locality

Obtém o URI para uma declaração que especifica a localidade em que uma entidade reside.

MobilePhone

Obtém o URI para uma declaração que especifica o número de telefone celular de uma entidade.

Name

Obtém o URI para uma declaração que especifica o nome de uma entidade.

NameIdentifier

Obtém o URI para uma declaração que especifica o nome de uma entidade.

OtherPhone

Obtém o URI para uma declaração que especifica o número de telefone alternativo de uma entidade.

PostalCode

Obtém o URI para uma declaração que especifica o CEP de uma entidade.

PPID

Obtém o URI de uma declaração que especifica o PPI (identificador pessoal privado) de uma entidade.

Rsa

Obtém o URI para uma declaração que especifica uma chave RSA.

Sid

Obtém o URI para uma declaração que especifica um SID (identificador de segurança).

Spn

Obtém o URI para uma declaração que especifica uma declaração de SPN (nome da entidade de serviço).

StateOrProvince

Obtém o URI para uma declaração que especifica o estado ou província em que uma entidade reside.

StreetAddress

Obtém o URI para uma declaração que especifica o endereço de uma entidade.

Surname

Obtém o URI para uma declaração que especifica o sobrenome de uma entidade.

System

Obtém o URI para uma declaração que identifica uma entidade do sistema.

Thumbprint

Obtém o URI para uma declaração que especifica uma impressão digital.

Upn

Obtém o URI para uma declaração que especifica um nome UPN.

Uri

Obtém o URI para uma declaração que especifica um URI.

Webpage

Obtém o URI para uma declaração que especifica a página da Web de uma entidade.

X500DistinguishedName

Obtém a cadeia de caracteres que contém o URI para uma declaração de nome diferenciado de um certificado X.509.

Aplica-se a