Передача пользовательского параметра в returnurl из angular oidc-client
Я пытаюсь передать настраиваемый параметр для returnURL, который используется на странице входа в систему IdentityServer 4 из angular oidc-client.
На основе параметра, который я получаю из returnURL, я хочу обойти сайт входа в систему и перенаправить их на IDP. Я собираюсь добавить параметр на определенную страницу из angular, и оттуда я хочу перенаправить на вход.
Ссылки ниже говорят о них, но те, по которым я не могу следить. Не могли бы вы, ребята, помогите. Заранее спасибо.
Передайте специальный параметр для returnUrl, используемого на странице входа в 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);
}
Угловой 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.
if (vm.IsExternalLoginOnly || returnUrl.Contains("customparameter"))
1 ответ
Если кто-то ищет ответ. Я добавил маршрут, чтобы получать клиентов из приложения angular.
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.