ServiceSecurityContext ServiceSecurityContext ServiceSecurityContext ServiceSecurityContext Class

定義

リモート パーティのセキュリティ コンテキストを表します。Represents the security context of a remote party. クライアントではサービス ID を、サービスではクライアント ID を表します。On the client, represents the service identity and, on the service, represents the client identity.

public ref class ServiceSecurityContext
public class ServiceSecurityContext
type ServiceSecurityContext = class
Public Class ServiceSecurityContext
継承
ServiceSecurityContextServiceSecurityContextServiceSecurityContextServiceSecurityContext

次の例では、ServiceSecurityContext クラスを使用して、現在のセキュリティ コンテキストに関する情報を提供しています。The following example uses the ServiceSecurityContext class to provide information about the current security context. このコードは、StreamWriter クラスのインスタンスを作成して、情報をファイルに書き込みます。The code creates an instance of the StreamWriter class to write the information to a file.

// When this method runs, the caller must be an authenticated user 
// and the ServiceSecurityContext is not a null instance. 
public double Add(double n1, double n2)
{
    // Write data from the ServiceSecurityContext to a file using the StreamWriter class.
    using (StreamWriter sw = new StreamWriter(@"c:\ServiceSecurityContextInfo.txt"))
    {
        // Write the primary identity and Windows identity. The primary identity is derived from 
        // the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name);

        // Write the claimsets in the authorization context. By default, there is only one claimset
        // provided by the system. 
        foreach (ClaimSet claimset in ServiceSecurityContext.Current.AuthorizationContext.ClaimSets)
        {
            foreach (Claim claim in claimset)
            {
                // Write out each claim type, claim value, and the right. There are two
                // possible values for the right: "identity" and "possessproperty". 
                sw.WriteLine("Claim Type: {0}, Resource: {1} Right: {2}",
                    claim.ClaimType,
                    claim.Resource.ToString(),
                    claim.Right);
                sw.WriteLine();
            }
        }
    }
    return n1 + n2;
}
' When this method runs, the caller must be an authenticated user and the ServiceSecurityContext 
' is not a null instance. 
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
    ' Write data from the ServiceSecurityContext to a file using the StreamWriter class.
    Dim sw As New StreamWriter("c:\ServiceSecurityContextInfo.txt")
    Try
        ' Write the primary identity and Windows identity. The primary identity is derived from 
        ' the credentials used to authenticate the user. The Windows identity may be a null string.
        sw.WriteLine("PrimaryIdentity: {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name)
        sw.WriteLine("WindowsIdentity: {0}", ServiceSecurityContext.Current.WindowsIdentity.Name)

        ' Write the claimsets in the authorization context. By default, there is only one claimset
        ' provided by the system. 
        Dim claimset As ClaimSet
        For Each claimset In ServiceSecurityContext.Current.AuthorizationContext.ClaimSets
            Dim claim As Claim
            For Each claim In claimset
                ' Write out each claim type, claim value, and the right. There are two
                ' possible values for the right: "identity" and "possessproperty". 
                sw.WriteLine("Claim Type: {0}, Resource: {1} Right: {2}", _
                claim.ClaimType, _
                claim.Resource.ToString(), _
                claim.Right)
                sw.WriteLine()
            Next claim
        Next claimset
    Finally
        sw.Dispose()
    End Try
    Return n1 + n2
End Function

次の例は、CheckAccessCore を使用してクレーム セットを解析する ServiceSecurityContext メソッドの実装を示しています。The following example shows an implementation of the CheckAccessCore method that uses the ServiceSecurityContext to parse a set of claims.

public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
    protected override bool CheckAccessCore(OperationContext operationContext)
    {                
        // Extract the action URI from the OperationContext. Match this against the claims
        // in the AuthorizationContext.
        string action = operationContext.RequestContext.RequestMessage.Headers.Action;
        Console.WriteLine("action: {0}", action);

        // Iterate through the various claimsets in the AuthorizationContext.
        foreach(ClaimSet cs in operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets)
        {
            // Examine only those claim sets issued by System.
            if (cs.Issuer == ClaimSet.System)
            {
                // Iterate through claims of type "http://example.org/claims/allowedoperation".
                foreach (Claim c in cs.FindClaims("http://example.org/claims/allowedoperation", 
                    Rights.PossessProperty))
                {
                    // Write the Claim resource to the console.
                    Console.WriteLine("resource: {0}", c.Resource.ToString());

                    // If the Claim resource matches the action URI then return true to allow access.
                    if (action == c.Resource.ToString())
                        return true;
                }
            }
        }

        // If this point is reached, return false to deny access.
         return false;                 
    }
}
Public Class MyServiceAuthorizationManager
    Inherits ServiceAuthorizationManager
    
    Protected Overrides Function CheckAccessCore(ByVal operationContext As OperationContext) As Boolean 
        ' Extract the action URI from the OperationContext. Match this against the claims
        ' in the AuthorizationContext.
        Dim action As String = operationContext.RequestContext.RequestMessage.Headers.Action
        Console.WriteLine("action: {0}", action)
        
        ' Iterate through the various claimsets in the authorizationcontext.
        Dim cs As ClaimSet
        For Each cs In  operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets
            ' Examine only those claim sets issued by System.
            If cs.Issuer Is ClaimSet.System Then
                ' Iterate through claims of type "http://example.org/claims/allowedoperation".
                Dim c As Claim
                For Each c In  cs.FindClaims("http://example.org/claims/allowedoperation", _
                        Rights.PossessProperty)
                    ' Write the Claim resource to the console.
                    Console.WriteLine("resource: {0}", c.Resource.ToString())
                    
                    ' If the Claim resource matches the action URI then return true to allow access.
                    If action = c.Resource.ToString() Then
                        Return True
                    End If
                Next c
            End If
        Next cs 
        ' If we get here, return false, denying access.
        Return False
    
    End Function 
End Class 

注釈

このデータは、メッセージの SecurityMessageProperty の一部です。The data is part of the SecurityMessageProperty for a message.

このクラスを使用して、実行時にリモートセキュリティコンテキストに関する情報を取得します。Use this class to obtain information about a remote security context at runtime. クライアントが認証され、メソッドへのアクセスを承認されると、セキュリティ コンテキストが作成されます。A security context is created when a client is successfully authenticated and authorized to access a method. メッセージの認証および承認に成功すると、クライアントの現在のサービス インスタンスのセキュリティ情報を、このクラスのインスタンスから取得できます。When a message is successfully authenticated and authorized, the security information from the client and for the current service instance can be obtained from an instance of this class.

ServiceSecurityContext のインスタンスは、Current クラスの OperationContext プロパティから取得できます。または、次の例に示すように、サービス操作メソッドの中から使用できます。You can retrieve an instance of the ServiceSecurityContext from the Current property of the OperationContext class, or use it from within a service operation method, as shown in the following example.

ClaimSet の解析Parsing a ClaimSet

このクラスは一般的に、メソッドにアクセスする際に、クライアントを識別するか承認することを目的として、現在のクレーム セットを取得するために使用します。A common use of the class is to retrieve the current set of claims for the purpose of identifying or authorizing a client when accessing a method. ClaimSet クラスは、Claim オブジェクトのコレクションを格納し、それぞれを解析して、特定のクレームが存在するかどうかを確認できます。The ClaimSet class contains a collection of Claim objects, and each can be parsed to determine whether a specific claim is present. 指定されたクレームが提供される場合は、承認を与えることができます。If the specified claim is provided, authorization can be granted. この機能は、CheckAccessCore クラスの ServiceAuthorizationManager メソッドをオーバーライドすることで提供されます。This functionality is provided by overriding the CheckAccessCore method of the ServiceAuthorizationManager class. 完全な例については、承認ポリシーを参照してください。For a complete example, see the Authorization Policy.

状況によっては、リモート クライアントが匿名ユーザーとして認証される場合でも、IsAuthenticated インターフェイスの IIdentity プロパティが true を返すことに注意してください。Note that under some circumstances, the IsAuthenticated property of the IIdentity interface returns true even if the remote client is authenticated as an anonymous user. (PrimaryIdentity プロパティは、IIdentity インターフェイスの実装を返します)。これは、次の状況に該当する場合に発生します。(The PrimaryIdentity property returns an implementation of the IIdentity interface.) The following circumstances must be true for this to occur:

  • サービスが Windows 認証を使用する。The service uses Windows authentication.

  • サービスが、匿名ログオンを許可する。The service allows anonymous logons.

  • バインディングは <customBinding>です。The binding is a <customBinding>.

  • カスタム バインドに <security> 要素が含まれている。The custom binding includes a <security> element.

  • 要素には、 <> requireSecurityContextCancellation属性がにfalse設定された secureConversationBootstrap が含まれています。 <security>The <security> element includes a <secureConversationBootstrap> with the requireSecurityContextCancellation attribute set to false.

コンストラクター

ServiceSecurityContext(AuthorizationContext) ServiceSecurityContext(AuthorizationContext) ServiceSecurityContext(AuthorizationContext) ServiceSecurityContext(AuthorizationContext)

指定した承認パラメーターを使用して、ServiceSecurityContext クラスの新しいインスタンスを初期化します。Initializes a new instance of the ServiceSecurityContext class with the specified authorization parameters.

ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>) ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>) ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>) ServiceSecurityContext(AuthorizationContext, ReadOnlyCollection<IAuthorizationPolicy>)

指定した承認パラメーターとポリシーのコレクションを使用して、ServiceSecurityContext クラスの新しいインスタンスを初期化します。Initializes a new instance of the ServiceSecurityContext class with the specified authorization parameters and collection of policies.

ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>) ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>) ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>) ServiceSecurityContext(ReadOnlyCollection<IAuthorizationPolicy>)

ポリシー オブジェクトのコレクションを使用して、ServiceSecurityContext クラスの新しいインスタンスを初期化します。Initializes a new instance of the ServiceSecurityContext class with the collection of policies object.

プロパティ

Anonymous Anonymous Anonymous Anonymous

匿名パーティを表すために通常使用されるクレーム、ID、およびその他のコンテキスト データの空のコレクションを格納する ServiceSecurityContext クラスのインスタンスを返します。Returns an instance of the ServiceSecurityContext class that contains an empty collection of claims, identities, and other context data that is usually used to represent an anonymous party.

AuthorizationContext AuthorizationContext AuthorizationContext AuthorizationContext

このクラスのインスタンスの承認情報を取得します。Gets the authorization information for an instance of this class. AuthorizationContext は、アプリケーションがパーティの情報を問い合わせて取得できる ClaimSet のコレクションを格納します。The AuthorizationContext contains a collection of ClaimSet that the application can interrogate and retrieve the information of the party.

AuthorizationPolicies AuthorizationPolicies AuthorizationPolicies AuthorizationPolicies

このクラスのインスタンスに関連付けられたポリシーのコレクションを取得します。Gets the collection of policies associated with an instance of this class.

Current Current Current Current

現在の ServiceSecurityContext を取得します。Gets the current ServiceSecurityContext.

IsAnonymous IsAnonymous IsAnonymous IsAnonymous

現在のクライアントが、サービスに対する資格情報を提供しているかどうかを示す値を取得します。Gets a value that indicates whether the current client has provided credentials to the service.

PrimaryIdentity PrimaryIdentity PrimaryIdentity PrimaryIdentity

現在の設定に関連付けられたプライマリ ID を取得します。Gets the primary identity associated with the current setting.

WindowsIdentity WindowsIdentity WindowsIdentity WindowsIdentity

現在の設定の Windows ID を取得します。Gets the Windows identity of the current setting.

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象

こちらもご覧ください