angular7 - 将自定义参数从角度 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"))
解决方案
如果有人正在寻找答案。我添加了路由,以便我可以从 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。
推荐阅读
- sql - 带有 IF 的 Oracle INSERT 触发器
- c - 在读/写linux字符设备中移动文件指针
- python - 有没有办法在python中循环一个函数?
- vb.net - 如何在 Outlook 中切换视图
- powershell - 用于创建新用户错误的学生脚本:System.String 类型为“System.Management.Automation.SwitchParameter”
- typescript - 为什么以`T extends undefined`为条件的Typescript类型,用`boolean`实例化T,将T解析为`never`?
- r - 无法从某些包中找到功能“某些功能”
- http - 当http响应相同时如果没有缓存会发生什么
- python - 无法使用系统分配的标识从 Azure 容器实例访问 Azure Vault
- node.js - Xero API:创建新项目时收到错误“PurchaseAccountId 帐户无效”