UserNameSecurityTokenAuthenticator クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
UserNameSecurityToken セキュリティ トークンを認証します。
public ref class UserNameSecurityTokenAuthenticator abstract : System::IdentityModel::Selectors::SecurityTokenAuthenticator
public abstract class UserNameSecurityTokenAuthenticator : System.IdentityModel.Selectors.SecurityTokenAuthenticator
type UserNameSecurityTokenAuthenticator = class
inherit SecurityTokenAuthenticator
Public MustInherit Class UserNameSecurityTokenAuthenticator
Inherits SecurityTokenAuthenticator
- 継承
- 派生
例
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.IdentityModel.Claims;
using System.IdentityModel.Policy;
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.Security.Principal;
using System.ServiceModel.Security;
using System.Text.RegularExpressions;
namespace Microsoft.ServiceModel.Samples
{
class MyTokenAuthenticator : UserNameSecurityTokenAuthenticator
{
static bool IsRogueDomain(string domain)
{
return false;
}
static bool IsEmail(string inputEmail)
{
string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
Regex re = new Regex(strRegex);
if (re.IsMatch(inputEmail))
return (true);
else
return (false);
}
bool ValidateUserNameFormat(string UserName)
{
if (!IsEmail(UserName))
{
Console.WriteLine("Not a valid email");
return false;
}
string[] emailAddress = UserName.Split('@');
string user = emailAddress[0];
string domain = emailAddress[1];
if (IsRogueDomain(domain))
return false;
return true;
}
protected override ReadOnlyCollection<IAuthorizationPolicy> ValidateUserNamePasswordCore(string userName, string password)
{
if (!ValidateUserNameFormat(userName))
throw new SecurityTokenValidationException("Incorrect UserName format");
ClaimSet claimSet = new DefaultClaimSet(ClaimSet.System, new Claim(ClaimTypes.Name, userName, Rights.PossessProperty));
List<IIdentity> identities = new List<IIdentity>(1);
identities.Add(new GenericIdentity(userName));
List<IAuthorizationPolicy> policies = new List<IAuthorizationPolicy>(1);
policies.Add(new UnconditionalPolicy(ClaimSet.System, claimSet, DateTime.MaxValue.ToUniversalTime(), identities));
return policies.AsReadOnly();
}
}
class UnconditionalPolicy : IAuthorizationPolicy
{
string id = Guid.NewGuid().ToString();
ClaimSet issuer;
ClaimSet issuance;
DateTime expirationTime;
IList<IIdentity> identities;
public UnconditionalPolicy(ClaimSet issuer, ClaimSet issuance, DateTime expirationTime, IList<IIdentity> identities)
{
if (issuer == null)
throw new ArgumentNullException("issuer");
if (issuance == null)
throw new ArgumentNullException("issuance");
this.issuer = issuer;
this.issuance = issuance;
this.identities = identities;
this.expirationTime = expirationTime;
}
public string Id
{
get { return this.id; }
}
public ClaimSet Issuer
{
get { return this.issuer; }
}
public DateTime ExpirationTime
{
get { return this.expirationTime; }
}
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
evaluationContext.AddClaimSet(this, this.issuance);
if (this.identities != null)
{
object value;
IList<IIdentity> contextIdentities;
if (!evaluationContext.Properties.TryGetValue("Identities", out value))
{
contextIdentities = new List<IIdentity>(this.identities.Count);
evaluationContext.Properties.Add("Identities", contextIdentities);
}
else
{
contextIdentities = value as IList<IIdentity>;
}
foreach (IIdentity identity in this.identities)
{
contextIdentities.Add(identity);
}
}
evaluationContext.RecordExpirationTime(this.expirationTime);
return true;
}
}
}
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Text
Imports System.IdentityModel.Claims
Imports System.IdentityModel.Policy
Imports System.IdentityModel.Selectors
Imports System.IdentityModel.Tokens
Imports System.Security.Principal
Imports System.ServiceModel.Security
Imports System.Text.RegularExpressions
Class MyTokenAuthenticator
Inherits UserNameSecurityTokenAuthenticator
Shared Function IsRogueDomain(ByVal domain As String) As Boolean
Return False
End Function 'IsRogueDomain
Shared Function IsEmail(ByVal inputEmail As String) As Boolean
Dim strRegex As String = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + "\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + ".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
Dim re As New Regex(strRegex)
If re.IsMatch(inputEmail) Then
Return True
Else
Return False
End If
End Function 'IsEmail
Function ValidateUserNameFormat(ByVal UserName As String) As Boolean
If Not IsEmail(UserName) Then
Console.WriteLine("Not a valid email")
Return False
End If
Dim emailAddress As String() = UserName.Split("@"c)
Dim user As String = emailAddress(0)
Dim domain As String = emailAddress(1)
If IsRogueDomain(domain) Then
Return False
End If
Return True
End Function
Protected Overrides Function ValidateUserNamePasswordCore(ByVal userName As String, ByVal password As String) As ReadOnlyCollection(Of IAuthorizationPolicy)
If Not ValidateUserNameFormat(userName) Then
Throw New SecurityTokenValidationException("Incorrect UserName format")
End If
Dim setOfClaims As New DefaultClaimSet(ClaimSet.System, New Claim(ClaimTypes.Name, userName, Rights.PossessProperty))
Dim identities As New List(Of IIdentity)(1)
identities.Add(New GenericIdentity(userName))
Dim policies As New List(Of IAuthorizationPolicy)(1)
policies.Add(New UnconditionalPolicy(ClaimSet.System, setOfClaims, DateTime.MaxValue.ToUniversalTime(), identities))
Return policies.AsReadOnly()
End Function 'New
End Class
Class UnconditionalPolicy
Implements IAuthorizationPolicy
Private idValue As String = Guid.NewGuid().ToString()
Private issuerValue As ClaimSet
Private issuance As ClaimSet
Private expirationTimeValue As DateTime
Private identities As IList(Of IIdentity)
Public Sub New(ByVal issuer As ClaimSet, ByVal issuance As ClaimSet, ByVal expirationTime As DateTime, ByVal identities As IList(Of IIdentity))
If issuer Is Nothing Then
Throw New ArgumentNullException("issuer")
End If
If issuance Is Nothing Then
Throw New ArgumentNullException("issuance")
End If
Me.issuerValue = issuer
Me.issuance = issuance
Me.identities = identities
Me.expirationTimeValue = expirationTime
End Sub
Public ReadOnly Property Id() As String Implements IAuthorizationPolicy.Id
Get
Return Me.idValue
End Get
End Property
Public ReadOnly Property Issuer() As ClaimSet Implements IAuthorizationPolicy.Issuer
Get
Return Me.issuerValue
End Get
End Property
Public ReadOnly Property ExpirationTime() As DateTime
Get
Return Me.expirationTimeValue
End Get
End Property
Public Function Evaluate(ByVal evalContext As evaluationContext, ByRef state As Object) As Boolean Implements IAuthorizationPolicy.Evaluate
evalContext.AddClaimSet(Me, Me.issuance)
If Not (Me.identities Is Nothing) Then
Dim value As Object = Nothing
Dim contextIdentities As IList(Of IIdentity)
If Not evalContext.Properties.TryGetValue("Identities", value) Then
contextIdentities = New List(Of IIdentity)(Me.identities.Count) '
evalContext.Properties.Add("Identities", contextIdentities)
Else
contextIdentities = CType(value, IList(Of IIdentity))
End If
Dim identity As IIdentity
For Each identity In Me.identities
contextIdentities.Add(identity)
Next identity
End If
evalContext.RecordExpirationTime(Me.expirationTimeValue)
Return True
End Function
End Class
注釈
UserNameSecurityTokenAuthenticator クラスをオーバーライドして、セキュリティ トークンをユーザー名とパスワードで認証します。
Windows Communication Foundation には、セキュリティ トークンの認証 UserNameSecurityToken をサポートする次のクラスが付属しています。
種類 | 説明 |
---|---|
CustomUserNameSecurityTokenAuthenticator | カスタム認証方式を使用してユーザー名とパスワードを認証する機能をアプリケーションに提供します。 認証方式の提供には、UserNamePasswordValidator クラスの派生クラスを使用します。 |
WindowsUserNameSecurityTokenAuthenticator | ユーザー名とパスワードを Windows アカウントとして認証します。 |
多くのカスタム認証方式では、CustomUserNameSecurityTokenAuthenticator クラスを使用して、UserNamePasswordValidator クラスの派生クラスを実装できます。 ただし、さらに高い柔軟性が必要な場合は、UserNameSecurityTokenAuthenticator クラスの派生クラスを作成して、ValidateUserNamePasswordCore メソッドをオーバーライドできます。
コンストラクター
UserNameSecurityTokenAuthenticator() |
UserNameSecurityTokenAuthenticator クラスの新しいインスタンスを初期化します。 |
メソッド
CanValidateToken(SecurityToken) |
指定したセキュリティ トークンをこのセキュリティ トークン認証システムで検証できるかどうかを示す値を取得します。 (継承元 SecurityTokenAuthenticator) |
CanValidateTokenCore(SecurityToken) |
指定したセキュリティ トークンをこのセキュリティ トークン認証システムで検証できるかどうかを示す値を取得します。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
ValidateToken(SecurityToken) |
指定したセキュリティ トークンを認証し、セキュリティ トークンの一連の承認ポリシーを返します。 (継承元 SecurityTokenAuthenticator) |
ValidateTokenCore(SecurityToken) |
指定したセキュリティ トークンを認証し、セキュリティ トークンの一連の承認ポリシーを返します。 |
ValidateUserNamePasswordCore(String, String) |
派生クラスでオーバーライドされると、指定されたユーザー名とパスワードを認証し、UserNameSecurityToken セキュリティ トークンの一連の承認ポリシーを返します。 |
適用対象
.NET