我正在尝试从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
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"))发布于 2019-10-18 16:17:20
以防有人在寻找答案。我已经添加了路由,这样我就可以从angular应用程序中获取clientid。
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,它获取值并从client oidc向dotnet授权端点(在我的例子中是accountcontroller.cs)发送一个redirect_url,基于这个端点,我执行所需的逻辑来处理不同的客户端登录和idps。
https://stackoverflow.com/questions/58279608
复制相似问题