ClaimTypes Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa los tipos predefinidos de notificaciones que una entidad puede reclamar. 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
Use la ClaimTypes clase 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 , ClaimSetuse el FindClaims(String, String) método y use las propiedades de esta clase para especificar el tipo de notificación para el claimType parámetro . Cuando el constructor de la Claim clase se usa para crear una nueva notificación, use las propiedades de la ClaimTypes clase para especificar el claimType parámetro . Para muchos de los tipos de notificación, la Claim clase tiene propiedades estáticas que devuelven una notificación de un tipo específico. Por ejemplo, el CreateHashClaim(Byte[]) método devuelve una notificación mediante el tipo de Hash notificación .
Propiedades
| Nombre | Description |
|---|---|
| Anonymous |
Obtiene el URI de una notificación que especifica el usuario anónimo. |
| Authentication |
Obtiene el URI de una notificación que especifica detalles sobre si se autentica una identidad. |
| AuthorizationDecision |
Obtiene el URI de una notificación que especifica una decisión de autorización en una entidad. |
| Country |
Obtiene el URI de una notificación que especifica el país o región en el que reside una entidad. |
| DateOfBirth |
Obtiene el URI de una notificación que especifica la fecha de nacimiento de una entidad. |
| DenyOnlySid |
Obtiene el URI de una notificación que especifica un identificador de seguridad de solo denegación (SID) para una entidad. |
| Dns |
Obtiene el URI de una notificación que especifica el nombre DNS asociado al nombre del equipo o con el nombre alternativo del firmante o emisor de un certificado X.509. |
|
Obtiene el URI de una notificación que especifica la dirección de correo electrónico de una entidad. |
|
| Gender |
Obtiene el URI de una notificación que especifica el género de una entidad. |
| GivenName |
Obtiene el URI de una notificación que especifica el nombre especificado de una entidad. |
| Hash |
Obtiene el URI de una notificación que especifica un valor hash. |
| HomePhone |
Obtiene el URI de una notificación que especifica el número de teléfono principal de una entidad. |
| Locality |
Obtiene el URI de una notificación que especifica la configuración regional en la que reside una entidad. |
| MobilePhone |
Obtiene el URI de una notificación que especifica el número de teléfono móvil de una entidad. |
| Name |
Obtiene el URI de una notificación que especifica el nombre de una entidad. |
| NameIdentifier |
Obtiene el URI de una notificación que especifica el nombre de una entidad. |
| OtherPhone |
Obtiene el URI de una notificación que especifica el número de teléfono alternativo de una entidad. |
| PostalCode |
Obtiene el URI de una notificación que especifica el código postal de una entidad. |
| PPID |
Obtiene el URI de una notificación que especifica el identificador personal privado (PPI) de una entidad. |
| Rsa |
Obtiene el URI de una notificación que especifica una clave RSA. |
| Sid |
Obtiene el URI de una notificación que especifica un identificador de seguridad (SID). |
| Spn |
Obtiene el URI de una notificación que especifica una notificación de nombre de entidad de seguridad de servicio (SPN). |
| StateOrProvince |
Obtiene el URI de una notificación que especifica el estado o provincia en el que reside una entidad. |
| StreetAddress |
Obtiene el URI de una notificación que especifica la dirección postal de una entidad. |
| Surname |
Obtiene el URI de una notificación que especifica el apellido de una entidad. |
| System |
Obtiene el URI de una notificación que identifica la entidad del sistema. |
| Thumbprint |
Obtiene el URI de una notificación que especifica una huella digital. |
| Upn |
Obtiene el URI de una notificación que especifica un nombre principal de usuario (UPN). |
| Uri |
Obtiene el URI de una notificación que especifica un URI. |
| Webpage |
Obtiene el URI de una notificación que especifica la página web de una entidad. |
| X500DistinguishedName |
Obtiene la cadena que contiene el URI de una notificación de nombre distintivo de un certificado X.509. |