Base solution for your next web application
Open Closed

ClassLink External oAuth2 Flow Implementation #7832


User avatar
0
wksoftwareconsulting created

Hello we are trying to implment classlink login integration. So if user click on class link button they get authenticated and then our backend get login info which user is logged in. with code below it shows class link button and on click it redirect user to class link page and user get logged in but after that it again go back to class link page something wrong .. can you help me to make it working...

https://developer.classlink.com/docs/oauth2-workflow

I added following code to try to make it run Rhithm.Web.Host\Startup\RhithmWebHostModule.cs

if (bool.Parse(_appConfiguration["Authentication:ClassLink:IsEnabled"]))
            { 
                externalAuthConfiguration.Providers.Add(
                    new ExternalLoginProviderInfo(
                        "ClassLink",
                        _appConfiguration["Authentication:ClassLink:ClientId"],
                        _appConfiguration["Authentication:ClassLink:ClientSecret"],
                        typeof(OAuth2ConnectAuthProviderApi),
                        new Dictionary<string, string>
                        {
                            {"Authority", _appConfiguration["Authentication:ClassLink:Authority"]},
                            {"LoginUrl",_appConfiguration["Authentication:ClassLink:LoginUrl"]},
                            {"ValidateIssuer",_appConfiguration["Authentication:ClassLink:ValidateIssuer"]}
                        }
                    )
                );
            }
 

Rhithm.Web.Host\Startup\AuthConfigurer.cs

        if (bool.Parse(configuration["Authentication:ClassLink:IsEnabled"]))
            {
                authenticationBuilder.AddOAuth("ClassLink", options =>
                {
                    options.ClientId = configuration["Authentication:ClassLink:ClientId"];
                    options.ClientSecret = configuration["Authentication:ClassLink:ClientSecret"];
                    options.CallbackPath = new PathString("/classLink/GetTokenInfoAsync");

                    options.AuthorizationEndpoint = "https://launchpad.classlink.com/oauth2/v2/auth";
                    options.TokenEndpoint = "https://launchpad.classlink.com/oauth2/v2/token";
                    options.UserInformationEndpoint = "https://nodeapi.classlink.com/v2/my/info";
                    options.Scope.Add("full");

                    options.SaveTokens = true;

                    options.Events = new OAuthEvents
                    {
                        OnCreatingTicket = async context =>
                        {
                            var request = new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint);
                            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);

                            var response = await context.Backchannel.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, context.HttpContext.RequestAborted);
                            response.EnsureSuccessStatusCode();

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

                            context.RunClaimActions(user);
                        }
                    };
                });
            }
            

\angular\src\account\login\login.service.ts

       private getClasslinkConnectConfig(loginProvider: ExternalLoginProvider): any {
        debugger;
        let authConfig = new AuthConfig();
        authConfig.loginUrl = loginProvider.additionalParams['LoginUrl'];
        authConfig.issuer = loginProvider.additionalParams['Authority'];
        authConfig.skipIssuerCheck = loginProvider.additionalParams['ValidateIssuer'] === 'false';
        authConfig.clientId = loginProvider.clientId;
        authConfig.responseType = 'code';
        authConfig.redirectUri = window.location.origin + '/account/login';
        authConfig.scope = 'full';
        authConfig.requestAccessToken = true;
        return authConfig; 
    }
Markdown is supported
Copy & paste or drag & drop images (max 30 MB per image)

2 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team

    hi wksoftwareconsulting It seems that classlink supports openid connect. You can try it in Zero.

    https://launchpad.classlink.com/.well-known/openid-configuration

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)
  • User Avatar
    0
    ismcagdas created
    Support Team

    This issue is closed because it has not had recent activity for a long time.

    Markdown is supported
    Copy & paste or drag & drop images (max 30 MB per image)