ClaimTypes 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示实体可以声明的预定义声明类型。 此类不能被继承。
public ref class ClaimTypes abstract sealed
public static class ClaimTypes
type ClaimTypes = class
Public Class ClaimTypes
- 继承
-
ClaimTypes
示例
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
注解
使用 ClaimTypes 类在 ClaimSet 中搜索特定类型的声明或创建一个声明。 若要在 ClaimSet 中搜索特定类型的声明,请使用 FindClaims(String, String) 方法并使用此类的属性为 claimType
参数指定声明类型。 当使用 Claim 类的构造函数创建新声明时,请使用 ClaimTypes 类的属性指定 claimType
参数。 对于许多声明类型,Claim 类都具有返回特定类型声明的静态属性。 例如,CreateHashClaim(Byte[]) 方法使用 Hash 声明类型返回一个声明。
属性
Anonymous |
获取声明的 URI,该 URI 指定匿名用户。 |
Authentication |
获取声明的 URI,该 URI 指定关于标识是否经过身份验证的详细信息。 |
AuthorizationDecision |
获取声明的 URI,该 URI 指定对于实体的授权决定。 |
Country |
获取声明的 URI,该 URI 指定实体所在的国家/地区。 |
DateOfBirth |
获取声明的 URI,该 URI 指定实体的出生日期。 |
DenyOnlySid |
获取声明的 URI,该 URI 指定实体的 deny-only 安全标识符 (SID)。 |
Dns |
获取声明的 URI,该 URI 指定与计算机名称关联的 DNS 名称或者与 X.509 证书的使用者或颁发者的备用名称关联的 DNS 名称。 |
获取声明的 URI,该 URI 指定实体的电子邮件地址。 |
|
Gender |
获取声明的 URI,该 URI 指定实体的性别。 |
GivenName |
获取声明的 URI,该 URI 指定实体的名字。 |
Hash |
获取声明的 URI,该 URI 指定一个哈希值。 |
HomePhone |
获取声明的 URI,该 URI 指定实体的住宅电话号码。 |
Locality |
获取声明的 URI,该 URI 指定实体所在的区域。 |
MobilePhone |
获取声明的 URI,该 URI 指定实体的移动电话号码。 |
Name |
获取声明的 URI,该 URI 指定实体的名称。 |
NameIdentifier |
获取声明的 URI,该 URI 指定实体的名称。 |
OtherPhone |
获取声明的 URI,该 URI 指定实体的备用电话号码。 |
PostalCode |
获取声明的 URI,该 URI 指定实体的邮政编码。 |
PPID |
获取声明的 URI,该 URI 指定实体的私人标识符 (PPI)。 |
Rsa |
获取声明的 URI,该 URI 指定一个 RSA 密钥。 |
Sid |
获取声明的 URI,该 URI 指定一个安全标识符 (SID)。 |
Spn |
获取声明的 URI,该 URI 指定一个服务主体名称 (SPN) 声明。 |
StateOrProvince |
获取声明的 URI,该 URI 指定实体所在的州或省份。 |
StreetAddress |
获取声明的 URI,该 URI 指定实体的街道地址。 |
Surname |
获取声明的 URI,该 URI 指定实体的姓氏。 |
System |
获取声明的 URI,该 URI 标识系统实体。 |
Thumbprint |
获取声明的 URI,该 URI 指定一个指纹。 |
Upn |
获取声明的 URI,该 URI 指定一个用户主体名称 (UPN)。 |
Uri |
获取声明的 URI,该 URI 指定一个 URI。 |
Webpage |
获取声明的 URI,该 URI 指定实体的网页。 |
X500DistinguishedName |
获取一个字符串,其中包含 X.509 证书的可分辨名称声明的 URI。 |