У меня есть страница PHP, работающая на IIS8.
Аутентификация осуществляется через ADFS.
Я хотел бы получить доступ к значениям некоторых утверждений в токене SAML пользователя со страницы PHP, но я думаю, что эти значения все равно не сохраняются.
Я попытался создать собственный HttpModule для передачи значений на страницу PHP:
using Microsoft.IdentityModel.Claims;
using System;
using System.Threading;
using System.Web;
public class TestModule : IHttpModule {
public void Init(HttpApplication context) {
context.AuthenticateRequest += Context_AuthenticateRequest;
}
private void Context_AuthenticateRequest(object sender, EventArgs e) {
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
IClaimsPrincipal principal = Thread.CurrentPrincipal as IClaimsPrincipal;
if (principal == null || principal.Identities == null || principal.Identities.Count == 0) {
context.Response.Write("TestModule: cannot get claims.<br/>");
return;
}
IClaimsIdentity identity = principal.Identities[0];
foreach (Claim claim in identity.Claims) {
if (claim.ClaimType == "http://schemas.xmlsoap.org/claims/DisplayName") {
context.Response.Write("TestModule: setting USER_DISPLAY_NAME to " + claim.Value + "<br/>");
Environment.SetEnvironmentVariable("USER_DISPLAY_NAME", claim.Value);
}
}
}
public void Dispose() {
}
}
Это выполняется, и для переменной задано правильное значение.
На странице PHP у меня есть это:
<?php
echo getenv('USER_DISPLAY_NAME');
?>
Но ничего не отображается.
Можно ли передать переменную на страницу PHP с помощью специального модуля?
Есть ли другой более стандартный способ получения значений утверждений ADFS со страницы PHP в IIS?
Задача ещё не решена.
Других решений пока нет …