Example: Implementing a user credential generator for .NET applications
You can use this example to write your own implementation of the ICredentialGenerator interface. The interface takes a user ID and a password. The UserPasswordCredential object contains the user ID and password, which is obtained from the read-only Credential property.
UserPasswordCredentialGenerator.cs
// Module : UserPasswordCredientialGenerator.cs
//
// Source File Description: Reference Documentation
//
using System;
using System.Security.Authentication;
using IBM.WebSphere.Caching.Security;
using com.ibm.websphere.objectgrid.security.plugins.builtins;
namespace IBM.WebSphere.Caching.Security
{
public class UserPasswordCredentialGenerator : ICredentialGenerator
{
private String ivUser;
private String ivPwd;
public ICredential Credential { get { return _getCredential(); } }
public string Properties { set {_setProperties(value);} }
public UserPasswordCredentialGenerator()
{
ivUser = null;
ivPwd = null;
}
public UserPasswordCredentialGenerator(String user=null, String pwd=null)
{
ivUser = user;
ivPwd = pwd;
}
/// <summary>Creates a new UserPasswordCredential object using this object's user name and password.
/// </summary>
/// <returns>new UserPasswordCredential instance</returns>
private ICredential _getCredential()
{
try
{
ICredential MyCredential = new UserPasswordCredential(ivUser, ivPwd) as ICredential;
return (ICredential) MyCredential;
}
catch (Exception e)
{
AuthenticationException CannotGenerateCredentialException = new AuthenticationException(e.ToString());
throw CannotGenerateCredentialException;
}
}
/// <summary>Gets the password for this credential generator.
/// </summary>
/// <returns>the password argument that was passed to the constructor</returns>
public String getPassword()
{
return ivPwd;
}
/// <summary>Gets the user name for this credential.
/// </summary>
/// <returns>the user argument that was passed to the constructor of this class</returns>
public String getUserName()
{
return ivUser;
}
/// <summary>Sets additional properties namely a user name and password.
///Throws ArgumentException if the format is not valid
/// </summary>
/// <param name="properties">properties a properties string with a user name and a password separated by a blank.</param>
private void _setProperties(string properties)
{
String token = properties;
char[] Seperator = { ' ' };
String[] StringProperty = properties.Split(Seperator);
if (StringProperty.Length != 2)
{
throw new ArgumentException(
"The properties should have a user name and password and separated by a space.");
}
ivUser = StringProperty[0];
ivPwd = StringProperty[1];
}
/// <summary>Checks two UserPasswordCredentialGenerator objects for equality.
///<p>
///Two UserPasswordCredentialGenerator objects are equal if and only if
///their user names and passwords are equal.
/// </summary>
/// <param name="obj">the object we are testing for equality with this object.</param>
/// <returns><code>true</code> if both UserPasswordCredentialGenerator objects are equivalent</returns>
public override bool Equals(Object obj)
{
if (obj == this)
{
return true;
}
if (obj != null && obj is UserPasswordCredentialGenerator)
{
UserPasswordCredentialGenerator other = (UserPasswordCredentialGenerator)obj;
Boolean bothUserNull = false;
Boolean bothPwdNull = false;
if (ivUser == null)
{
if (other.ivUser == null)
{
bothUserNull = true;
}
else
{
return false;
}
}
if (ivPwd == null)
{
if (other.ivPwd == null)
{
bothPwdNull = true;
}
else
{
return false;
}
}
return (bothUserNull || ivUser.Equals(other.ivUser)) && (bothPwdNull || ivPwd.Equals(other.ivPwd));
}
return false;
}
/// <summary>Returns the hashcode of the UserPasswordCredentialGenerator object.
/// </summary>
/// <returns>the hash code of this object</returns>
public override int GetHashCode()
{
return ivUser.GetHashCode() + ivPwd.GetHashCode();
}
}
}