Мне нужно выполнить SSO-аутентификацию с saml2 для моего существующего веб-приложения asp.net.
Для этого я использую пример Sustainsys.Saml2.Owin.
Поставщик удостоверений - Azure ADFS(https://sts.windows.net/TENANTID)
Я настроил файл запуска.Он загружает файл метаданных и сертификат.
И на моей странице входа в систему я провожу вызов, если не прошел проверку подлинности.
Он успешно перенаправляет на страницу входа, но запрос никогда не проходит проверку подлинности послеавторизоваться.И в ответном URL мы получаем error = access_denied
[ни Request.IsAuthenticated, ни owinContext.Authentication.User.Identity.IsAuthenticated установлены в true]
Такэто продолжает вызывать проблемы много раз и ошибка с плохим запросом.
Что я делаю не так?Какой модуль Owin / Sustainsys отвечает за установку статуса IsAuthenticated?
* a Saml2. cookie [Saml2.DAeP63c *** UTX0h *** _ ***] передается вместе с запросом после входа в Microsoft [https://login.microsoftonline.com/TENANTID/saml2]
Startup.cs файл
public void ConfigureAuth(IAppBuilder appBuilder)
{
try
{
appBuilder.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
appBuilder.UseCookieAuthentication(new CookieAuthenticationOptions());
appBuilder.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
appBuilder.UseSaml2Authentication(CreateSaml2Options());
}
catch (Exception exp)
{
}
}
private Saml2AuthenticationOptions CreateSaml2Options()
{
try
{
var spOptions = CreateSPOptions();
var Saml2AuthOptions = new Saml2AuthenticationOptions(false)
{
SPOptions = spOptions,
Notifications = new Saml2Notifications(),
};
var idp = new IdentityProvider(new EntityId(authority), spOptions)
{
MetadataLocation = metadataLocation,
Binding = Saml2BindingType.HttpRedirect
};
idp.SigningKeys.AddConfiguredKey(
new X509Certificate2(certificateLocation));
Saml2AuthOptions.IdentityProviders.Add(idp);
return Saml2AuthOptions;
}
catch (Exception exp)
{
}
}
private SPOptions CreateSPOptions()
{
try
{
var engAus = "en-AU";
var organization = new Organization();
var spOptions = new SPOptions
{
EntityId = new EntityId(ApplicationId),
ReturnUrl = new Uri(redirectUrl),
Organization = organization,
};
return spOptions;
}
catch (Exception exp)
{
}
}
Login.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
IOwinContext owinContext = HttpContext.Current.GetOwinContext();
//if (Request.IsAuthenticated)
if (owinContext.Authentication.User != null &&
owinContext.Authentication.User.Identity != null &&
owinContext.Authentication.User.Identity.IsAuthenticated)
{
//Authenticated
string name = owinContext.Authentication.User.Identity.Name;
}
else
{
var authenticationTypes = owinContext.Authentication.GetAuthenticationTypes().Select(d => d.AuthenticationType).ToArray();
owinContext.Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, authenticationTypes);
}
}
}