首页 > 解决方案 > 将自定义参数从角度 oidc-client 传递给 returnurl

问题描述

我正在尝试将自定义参数传递给从 angular oidc-client 登录页面 IdentityServer 4 中使用的 returnURL。

根据我从 returnURL 收到的参数,我想绕过登录网站并将它们重定向到 IDP。我打算从角度将参数添加到特定页面,然后我想从那里重定向到登录。

下面的链接讨论了它们,但我无法关注它们。你们能帮忙吗。提前致谢。

将自定义参数传递给登录页面 Identity Server 4 中使用的 returnUrl

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 的 Login 方法中添加这样的条件。

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

标签: angular7identityserver4oidc-client

解决方案


如果有人正在寻找答案。我添加了路由,以便我可以从 Angular 应用程序获取客户端 ID。

应用程序.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。


推荐阅读