Если вы хотите иметь метод, который проверяет пользователя в разных доменах, вам придется l oop через разные домены (с пользователями, которые имеют доступ для чтения через каждый домен).
Если вы делаете Имея информацию о домене, доступную пользователю, вы можете добавить домен в качестве аргумента для вашего метода.
Я не уверен, есть ли у AuthUserSession
какое-либо свойство, которое также может содержать домен пользователя. Если это так, используйте его вместо аргумента domainName, переданного методу.
public void LoadUserAuthInfo(AuthUserSession userSession, IAuthTokens tokens, Dictionary<string, string> authInfo, string domainName= someDefaultIfNoneProvided)
{
if (userSession == null)
return;
string lookup = userSession.Id;
List<string> domains = new List<string>() { "domain1", "domain2" };
bool userFound = false;
foreach (string domain in domains)
{
using (var pc = new PrincipalContext(ContextType.Domain, domain))
{
var user = UserPrincipal.FindByIdentity(pc, userSession.UserAuthName);
// ---> Add Check here to prevent NRE
if (user != null) {
SingleSignOnResponse ssoB = new SingleSignOnResponse();
ssoB.Username = user.Sid.Translate(typeof(NTAccount)).ToString();
ssoB.Timestamp = DateTime.Now;
SSOCache.Instance.TryAdd(lookup, ssoB);
userFound = true;
break; // No longer need to continue checking other domains.
}
else
{
// Handle case when user does not exist.
}
}
}
// Check if userFound = false. If so, do something with that exception.
}
Update
Если у вас есть имя_домена в session.id, используйте следующее,
string lookup = userSession.Id;
using (var pc = new PrincipalContext(ContextType.Domain, lookup.Split('\\')[0]))
{
...