Sustainsys.Saml2.Owin: как вызвать UseSaml2Authentication с несколькими наборами различных Saml2AuthenticationOptionsC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Sustainsys.Saml2.Owin: как вызвать UseSaml2Authentication с несколькими наборами различных Saml2AuthenticationOptions

Сообщение Anonymous »

Я новичок в Saml2, поэтому простите меня, если я не совсем правильно понимаю терминологию. Мне было поручено реализовать единый вход в нашем приложении. У меня ситуация похожая на этот вопрос. В нашем приложении пользователь вводит свое имя пользователя, а затем мне нужно пройти аутентификацию у соответствующего IdP для этого пользователя. Однако Saml2AuthenticationOptions.SPOptions.EntityId различен для каждого из них, как и IdentityProvider.EntityId.
Итак, я пытался сделать что-то вроде

Код: Выделить всё

private static Dictionary _saml2OptionsDict = new Dictionary();

public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

app.UseCookieAuthentication(new CookieAuthenticationOptions());

app.Properties["host.AppName"] = "AppName";

ConfigureIdentityProvider("provider1", "SamlEntityId.1", "IdPEntityId.1", "MetadataUrl.1", "ECMCLoantrackerDev.cer");
ConfigureIdentityProvider("provider2", "SamlEntityId.2", "IdPEntityId.2", "MetadataUrl.2", "LT Test app.cer");

app.UseSaml2Authentication(GetSaml2Options(("provider1")));
app.UseSaml2Authentication(GetSaml2Options(("provider2")));
}

private void ConfigureIdentityProvider(string providerKey, string samlEntityIdKey, string idpEntityIdKey, string metadataUrlKey, string certName)
{
var saml2Options = new Saml2AuthenticationOptions(false)
{
SPOptions = new Sustainsys.Saml2.Configuration.SPOptions
{
EntityId = new Sustainsys.Saml2.Metadata.EntityId(ConfigurationManager.AppSettings[samlEntityIdKey]),
ReturnUrl = new Uri(ConfigurationManager.AppSettings["ExternalLoginCallbackUrl"])
}
};

var idp = new Sustainsys.Saml2.IdentityProvider(
new Sustainsys.Saml2.Metadata.EntityId(ConfigurationManager.AppSettings[idpEntityIdKey]),
saml2Options.SPOptions)
{
MetadataLocation = ConfigurationManager.AppSettings[metadataUrlKey],
Binding = Sustainsys.Saml2.WebSso.Saml2BindingType.HttpRedirect
};

idp.SigningKeys.AddConfiguredKey(
new X509Certificate2(
HostingEnvironment.MapPath(
"~/App_Data/" + certName)));

saml2Options.IdentityProviders.Add(idp);

_saml2OptionsDict[providerKey] = saml2Options;
}

public static Saml2AuthenticationOptions GetSaml2Options(string providerKey)
{
return _saml2OptionsDict.ContainsKey(providerKey) ? _saml2OptionsDict[providerKey] : null;
}

Я считаю, что мне нужно затем выполнить поиск по имени пользователя, для которого параметры использовать, и передать это в задачу, что-то вроде

Код: Выделить всё

var saml2Options = Startup.GetSaml2Options(provider);
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/Account/ExternalLoginCallback" }, saml2Options.AuthenticationType);
Но я застреваю при многократном вызове UseSaml2Authentication. Если я сделаю то или другое, все будет в порядке, за исключением, конечно, тех пользователей, которые не смогут пройти аутентификацию. Таким образом, работает один IdP, но не несколько.
Опять же, как я уже сказал, я только новичок в этом, так возможно ли вообще то, что я пытаюсь сделать?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ple-sets-o
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»