/// <summary>
/// web.config based application_start
/// </summary>
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigurationBasedIdentityConfig.ConfigureIdentity();
}
public class ConfigurationBasedIdentityConfig
{
public static string AudienceUri { get; set; }
public static string Realm { get; private set; }
public static void ConfigureIdentity()
{
Realm = ConfigurationManager.AppSettings["ida:Realm"];
AudienceUri = ConfigurationManager.AppSettings["ida:AudienceUri"];
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
//tells the sts via querystring what login modes to accept
FederatedAuthentication
.FederationConfiguration
.WsFederationConfiguration
.SignInQueryString = string.Format("authModes={0}", ConfigurationManager.AppSettings.Get("authModes"));
//Prepare a/r claims
MyActionResourceClaimAuthorizationManager claimsAuthManager =
FederatedAuthentication
.FederationConfiguration
.IdentityConfiguration.ClaimsAuthorizationManager as MyActionResourceClaimAuthorizationManager;
if (claimsAuthManager == null)
throw new ConfigurationErrorsException("Missing Configuration entry for MyActionResourceClaimAuthorizationManager");
claimsAuthManager.LoadActionResourceClaims();
if (!String.IsNullOrEmpty(AudienceUri))
{
UpdateAudience();
}
if (!String.IsNullOrEmpty(Realm))
{
UpdateRealm();
}
}
/// <summary>
///
/// </summary>
private static void UpdateAudience()
{
int count = FederatedAuthentication.FederationConfiguration.IdentityConfiguration
.AudienceRestriction.AllowedAudienceUris.Count(
uri => String.Equals(uri.OriginalString, AudienceUri, StringComparison.OrdinalIgnoreCase));
if (count == 0)
{
FederatedAuthentication.FederationConfiguration.IdentityConfiguration
.AudienceRestriction.AllowedAudienceUris.Add(new Uri(ConfigurationBasedIdentityConfig.AudienceUri));
}
}
/// <summary>
///
/// </summary>
private static void UpdateRealm()
{
FederatedAuthentication.WSFederationAuthenticationModule.Realm = Realm;
}
}
}