Передать пользовательский параметр в returnurl из углового oidc-клиента - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь передать пользовательский параметр в returnURL, используемый на странице входа в систему IdentityServer 4 от angular oidc-client.

На основе параметра, который я получаю от returnURL, я хочу обойти сайт входа и перенаправитьих в ВПЛ. Я собираюсь добавить параметр на определенную страницу с углового уровня, и оттуда я хочу перенаправить для входа в систему.

Ниже ссылки говорят о них, но те, за которыми я не могу следовать. Ребята, пожалуйста, помогите. Заранее спасибо.

Передача пользовательского параметра в returnUrl, используемый на странице входа в систему Identity Server 4

https://github.com/IdentityServer/IdentityServer4/issues/909

C # AccountController.cs

public async Task<IActionResult> Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    var context = await _interaction.GetAuthorizationContextAsync(returnUrl);
    var vm = await _account.BuildLoginViewModelAsync(returnUrl);


    if (vm.IsExternalLoginOnly)
        return ExternalLogin(vm.ExternalProviders.First().AuthenticationScheme, returnUrl);

    return View(vm);
}

Angular auth.service.ts

const settings: any = {
  authority: environment.oauthUrl,
  client_id: 'website',
  redirect_uri: `${environment.applicationUrl}/auth.html`,
  post_logout_redirect_uri: `${environment.applicationUrl}`,
  response_type: 'id_token token',
  scope: 'openid profile email profile nucleus',

  silent_redirect_uri: `${environment.applicationUrl}/silent-renew.html`,
  automaticSilentRenew: true,

  monitorSession: true,
  checkSessionInterval: 2000,

  revokeAccessTokenOnSignout: true,
  filterProtocolClaims: true,
  loadUserInfo: true,

  changePasswordUrl: `${environment.oauthUrl}/Manage/ChangePassword?returnUrl=${environment.applicationUrl}`
};

Я ожидаю параметр от returnurl и добавляю подобное условие в метод Login для AccountController.cs.

if (vm.IsExternalLoginOnly || returnUrl.Contains("customparameter"))

1 Ответ

0 голосов
/ 18 октября 2019

Incase, если кто-то ищет ответ. Я добавил маршрут, чтобы я мог получить клиентскую информацию из углового приложения.

app.routes.ts

 { path: 'client/:id', component:ClientComponent }

В client.component.ts

constructor(private authService: AuthService,private route: ActivatedRoute) { }

  ngOnInit() {
    const clientId=this.route.snapshot.params.id;
    if(clientId!=null) {
      this.authService.startSigninClient(clientId);
    }
  }

В auth.service.ts

startSigninClient(clientid: string) {
    this.mgr.signinRedirect({
      extraQueryParams: {       
          client: clientid
      },
    })
      .catch((err) => {
        console.log(err);
      });
  }

Теперь, когда я открываю angular_app / client / clientid, он перенаправляет на client.component.ts, и я вызываю signinredirect, в который я добавляю extraQueryParams, который получаетзначение и отправка redirect_url из клиентского oidc в конечную точку авторизации dotnet (в моем случае accountcontroller.cs), в соответствии с которой я выполняю необходимую логику для обработки различных клиентских входов и идентификаторов.

...