コード例 #1
0
        protected override string BuildChallengeUrl(AuthenticationProperties properties, string redirectUri)
        {
            log.LogDebug("BuildChallengeUrl called with redirectUri = " + redirectUri);

            var scope = FormatScope();

            var state = Options.StateDataFormat.Protect(properties);

            //var queryBuilder = new QueryBuilder()
            //{
            //    { "client_id", Options.ClientId },
            //    { "scope", scope },
            //    { "response_type", "code" },
            //    { "redirect_uri", redirectUri },
            //    { "state", state },
            //};

            var    tenantFbOptions     = new MultiTenantMicrosoftOptionsResolver(Options, siteResolver, siteRepo, multiTenantOptions);
            string resolvedRedirectUri = tenantFbOptions.ResolveRedirectUrl(redirectUri);

            log.LogDebug("resolvedRedirectUri was " + resolvedRedirectUri);

            var queryBuilder = new QueryBuilder()
            {
                { "client_id", tenantFbOptions.ClientId },
                { "scope", scope },
                { "response_type", "code" },
                { "redirect_uri", resolvedRedirectUri },
                { "state", state },
            };

            return(Options.AuthorizationEndpoint + queryBuilder.ToString());
        }
コード例 #2
0
        protected override async Task <OAuthTokenResponse> ExchangeCodeAsync(string code, string redirectUri)
        {
            log.LogDebug("ExchangeCodeAsync called with code " + code + " redirectUri " + redirectUri);

            //var tokenRequestParameters = new Dictionary<string, string>()
            //{
            //    { "client_id", Options.ClientId },
            //    { "redirect_uri", redirectUri },
            //    { "client_secret", Options.ClientSecret },
            //    { "code", code },
            //    { "grant_type", "authorization_code" },
            //};

            var currentSite = await GetSite();

            var tenantFbOptions = new MultiTenantMicrosoftOptionsResolver(
                Options,
                currentSite,
                multiTenantOptions);

            var tokenRequestParameters = new Dictionary <string, string>()
            {
                { "client_id", tenantFbOptions.ClientId },
                { "redirect_uri", tenantFbOptions.ResolveRedirectUrl(redirectUri) },
                { "client_secret", tenantFbOptions.ClientSecret },
                { "code", code },
                { "grant_type", "authorization_code" },
            };

            var requestContent = new FormUrlEncodedContent(tokenRequestParameters);

            var requestMessage = new HttpRequestMessage(HttpMethod.Post, Options.TokenEndpoint);

            requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            requestMessage.Content = requestContent;
            var response = await Backchannel.SendAsync(requestMessage, Context.RequestAborted);

            response.EnsureSuccessStatusCode();
            var payload = JObject.Parse(await response.Content.ReadAsStringAsync());

            return(new OAuthTokenResponse(payload));
        }