/// <summary>
        /// Configures the Authentication layer.
        ///
        /// </summary>
        /// <param name="options">The options.</param>
        public static void Configure(OpenIdConnectOptions options)
        {
            Options = options;
            Options.TrustedAuthoritiesSet = new HashSet <string>();
            if (options.TrustedAuthorities != null)
            {
                foreach (var auth in options.TrustedAuthorities)
                {
                    var key = auth.ToLowerInvariant().RemoveTrailingSlash();
                    Options.TrustedAuthoritiesSet.Add(key);
                }
            }
            Options.TrustedAuthoritiesSet.Add(Options.Authority.ToLowerInvariant().RemoveTrailingSlash());

            //convert endpoint prefixes into app relative virtual path
            if (options.DemandAuthorizationHeaderForEndpointPrefixes?.Count > 0)
            {
                var list = new List <string>();
                foreach (var p in options.DemandAuthorizationHeaderForEndpointPrefixes)
                {
                    list.Add(System.Web.VirtualPathUtility.ToAppRelative(p));
                }
            }

            _idsService = new OpenIdService(Options);

            _tokenValidationService = new TokenValidationService(_idsService);

            var routes = RouteTable.Routes;

            var openIdRouterHandler = new RouterHandler();

            //create fake routes for open id sign-in and sign out endpoint
            //NOTE: without '/{action}' Html.ActionLink helper goes crazy and build incorrect url
            var routeSignIn = new Route(options.Authentication.SignInEndpoint + "/{action}", openIdRouterHandler)
            {
                Defaults = new RouteValueDictionary()
                {
                    { "controller", options.Authentication.SignInEndpoint }, { "action", "Index" }
                }
            };
            var routeSignOutCallback = new Route(options.Authentication.SignOutCallbackEndpoint + "/{action}", openIdRouterHandler)
            {
                Defaults = new RouteValueDictionary()
                {
                    { "controller", options.Authentication.SignOutCallbackEndpoint }, { "action", "Index" }
                }
            };

            routes.Add("OpenIdSignInEndpoint", routeSignIn);
            routes.Add("OpenIdSignOutCallbackEndpoint", routeSignOutCallback);
        }
예제 #2
0
 public TokenValidationService(OpenIdService idsService)
 {
     _idsService = idsService;
 }