首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将自定义参数从angular oidc-client传递给returnurl

将自定义参数从angular oidc-client传递给returnurl
EN

Stack Overflow用户
提问于 2019-10-08 10:50:04
回答 1查看 1.9K关注 0票数 1

我正在尝试从angular oidc- IdentityServer向登录页面客户端4中使用的returnURL传递一个自定义参数。

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

下面的链接谈到了他们,但我不能跟随他们。你们能帮帮忙吗。提前谢谢。

Pass custom parameter to returnUrl used in login page Identity Server 4

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

C# AccountController.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
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方法中添加一个类似这样的条件。

代码语言:javascript
复制
if (vm.IsExternalLoginOnly || returnUrl.Contains("customparameter"))
EN

回答 1

Stack Overflow用户

发布于 2019-10-18 16:17:20

以防有人在寻找答案。我已经添加了路由,这样我就可以从angular应用程序中获取clientid。

app.routes.ts

代码语言:javascript
复制
 { path: 'client/:id', component:ClientComponent }

在client.component.ts中

代码语言:javascript
复制
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中

代码语言:javascript
复制
startSigninClient(clientid: string) {
    this.mgr.signinRedirect({
      extraQueryParams: {       
          client: clientid
      },
    })
      .catch((err) => {
        console.log(err);
      });
  }

现在,当我打开angular_app/ client /clientid时,它会重定向到client.component.ts,并且我调用signinredirect,其中我添加了extraQueryParams,它获取值并从client oidc向dotnet授权端点(在我的例子中是accountcontroller.cs)发送一个redirect_url,基于这个端点,我执行所需的逻辑来处理不同的客户端登录和idps。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58279608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档