public async Task <IActionResult> Callback(
        AuthorizationCodeResponseViewModel authorizationCodeResponseViewModel,
        ImplicitFlowResponseQueryStringViewModel implicitFlowResponseQueryStringViewModel,
        ErrorResponseViewModel errorResponseAtResponseViewModel)
    {
        if (!string.IsNullOrWhiteSpace(errorResponseAtResponseViewModel.Error))
        {
            var errorResponseAtCallback = OAuthMapper.Map(errorResponseAtResponseViewModel);
            return(ProcessOAuthClientErrorResponse(errorResponseAtCallback));
        }

        var originalState = (string)TempData.ReadAndClear(Common.State);
        var codeVerifier  = (string)TempData.ReadAndClear(Common.CodeVerifier);

        var authorizationCodeCallbackResponse = OAuthMapper.Map(authorizationCodeResponseViewModel);
        var implicitFlowCallbackResponse      = OAuthMapper.Map(implicitFlowResponseQueryStringViewModel);

        var response = await _oAuthFlows.RunFlow(
            _oAuthClientConfiguration,
            authorizationCodeCallbackResponse,
            implicitFlowCallbackResponse,
            originalState : originalState,
            codeVerifier : codeVerifier);

        return(response switch
        {
            AccessTokenResponse accessTokenResponse => await SignInUser(accessTokenResponse, originalState),
            ErrorResponse errorResponse => ProcessOAuthClientErrorResponse(errorResponse)
        });
Example #2
0
 public static IOAuthClientResponse Map <T>(T source)
 {
     var response = (IOAuthClientResponse)(source switch
     {
         AuthorizationCodeResponseViewModel authorizationCodeResponseViewModel => Map(authorizationCodeResponseViewModel),
         ImplicitFlowResponseQueryStringViewModel implicitFlowResponseViewModel => Map(implicitFlowResponseViewModel),
     });
Example #3
0
    public static AuthorizationCodeResponse Map(AuthorizationCodeResponseViewModel source)
    {
        if (source == null)
        {
            return(null);
        }

        var destination = new AuthorizationCodeResponse
        {
            Code  = source.Code,
            State = source.State
        };

        return(destination);
    }
    public async Task <IActionResult> Callback(
        AuthorizationCodeResponseViewModel authorizationCodeResponseViewModel,
        ImplicitFlowResponseQueryStringViewModel implicitFlowResponseQueryStringViewModel,
        ErrorResponseViewModel errorResponseAtResponseViewModel)
    {
        if (!string.IsNullOrWhiteSpace(errorResponseAtResponseViewModel.Error))
        {
            var errorResponseAtCallback = Utils.Mappers.OAuthMapper.Map(errorResponseAtResponseViewModel);
            return(ProcessOAuthClientErrorResponse(errorResponseAtCallback));
        }

        var configurationName = (string)TempData.ReadAndClear(TempDataNames.OAuthTesterConfigurationName);
        var originalState     = (string)TempData.ReadAndClear(Common.State);
        var codeVerifier      = (string)TempData.ReadAndClear(Common.CodeVerifier);

        var oAuthTesterViewModel = Utils.Mappers.OAuthMapper.GetNewOAuthTesterViewModel(configurationName);

        oAuthTesterViewModel.OAuthClientConfiguration = _optionsMonitor.GetEx(configurationName);
        var oAuthFlows = _oAuthFlowsFactory.CreateOAuthFlows(configurationName);

        var authorizationCodeCallbackResponse = Utils.Mappers.OAuthMapper.Map(authorizationCodeResponseViewModel);
        var implicitFlowCallbackResponse      = Utils.Mappers.OAuthMapper.Map(implicitFlowResponseQueryStringViewModel);

        var response = await oAuthFlows.RunFlow(
            oAuthTesterViewModel.OAuthClientConfiguration,
            authorizationCodeCallbackResponse,
            implicitFlowCallbackResponse,
            originalState : originalState,
            codeVerifier : codeVerifier);

        switch (response)
        {
        case AccessTokenResponse accessTokenResponse:
            oAuthTesterViewModel.AccessTokenResponse = Utils.Mappers.OAuthMapper.Map(accessTokenResponse);
            break;

        case ErrorResponse errorResponse:
            return(ProcessOAuthClientErrorResponse(errorResponse));
        }

        return(View("Index", oAuthTesterViewModel));
    }