Передача пользовательского параметра в returnurl из angular oidc-client

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

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

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

Передайте специальный параметр для 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);
}

Угловой 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 и добавляю подобное условие в метод входа в AccountController.cs.

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

1 ответ

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

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 в моем случае), на основе которого я выполняю необходимую логику для обработки различных клиентских логинов и idps.

Другие вопросы по тегам