【问题标题】:Pass custom parameter to returnurl from angular oidc-client将自定义参数从角度 oidc-client 传递给 returnurl
【发布时间】:2020-02-05 08:13:29
【问题描述】:

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

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

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

Pass custom parameter to returnUrl used in login page 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 有一个参数,并在 AccountController.cs 的 Login 方法中添加这样的条件。

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

【问题讨论】:

    标签: angular7 identityserver4 oidc-client


    【解决方案1】:

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

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-05
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2019-05-05
      • 2011-11-10
      相关资源
      最近更新 更多