如何在 Identity Server 4 控制器中访问 Client_id 的调用客户端
How to Access Client_id of Calling Client in Identity Server 4 Controller
我正在使用 Identity Server 4 对网站和 WPF 应用程序进行身份验证。在网站上,我希望用户能够在登录时选中“记住我”框,但我不希望 WPF 应用程序这样做。我有在前端禁用该复选框的逻辑,但在我的控制器中遇到了问题。我有这个功能
[HttpGet]
public async Task<IActionResult> Login(string returnUrl)
{
LoginViewModel _vm;
_vm = await BuildLoginViewModelAsync(returnUrl);
//if(Client_id == "wpf") <- this is what I need help with
//{
// _vm.AllowRememberMe = false;
//}
return View(_vm);
}
此控制器包含
private readonly IIdentityServerInteractionService mInteraction;
private readonly IClientStore mClientStore;
private readonly IAuthenticationSchemeProvider mSchemeProvider;
private readonly IEventService mEvents;
如有任何帮助,我们将不胜感激
我认为 client_id 不能直接从登录方法中的任何 IS4 构造中获得。但是,根据您的 OIDC 流程,您的 client_id 可能作为“returnUrl”参数的一部分传递。看看你的 return URL 看看它是否在那里。
例如,我有一个连接到 IS4 的水疗网站,显示 returnURL 的:
https://localhost:8080/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3DspaClient%26redirect_uri%3Dhttps...(long url continues)
您可以看到它包含值为“spaClient”的“client_id”参数。只需使用您选择的代码(例如 RegEx)解析 returnUrl 并从那里提取 client_id。我没有任何 WPF 经验,因此它的行为可能会有所不同并且不会传递此参数。
您可以使用您的代码片段从 IIdentityServerInteractionService
返回的 AuthorizationRequest
获取客户端 ID,如下所示:
var context = await mInteraction.GetAuthorizationContextAsync(returnUrl);
_vm.AllowedRememberMe = context.ClientId != "wpf";
但是,最好将此逻辑放在构造视图模型的 BuildLoginViewModelAsync
方法中,而不是在构造后设置 属性。
我正在使用 Identity Server 4 对网站和 WPF 应用程序进行身份验证。在网站上,我希望用户能够在登录时选中“记住我”框,但我不希望 WPF 应用程序这样做。我有在前端禁用该复选框的逻辑,但在我的控制器中遇到了问题。我有这个功能
[HttpGet]
public async Task<IActionResult> Login(string returnUrl)
{
LoginViewModel _vm;
_vm = await BuildLoginViewModelAsync(returnUrl);
//if(Client_id == "wpf") <- this is what I need help with
//{
// _vm.AllowRememberMe = false;
//}
return View(_vm);
}
此控制器包含
private readonly IIdentityServerInteractionService mInteraction;
private readonly IClientStore mClientStore;
private readonly IAuthenticationSchemeProvider mSchemeProvider;
private readonly IEventService mEvents;
如有任何帮助,我们将不胜感激
我认为 client_id 不能直接从登录方法中的任何 IS4 构造中获得。但是,根据您的 OIDC 流程,您的 client_id 可能作为“returnUrl”参数的一部分传递。看看你的 return URL 看看它是否在那里。
例如,我有一个连接到 IS4 的水疗网站,显示 returnURL 的:
https://localhost:8080/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fclient_id%3DspaClient%26redirect_uri%3Dhttps...(long url continues)
您可以看到它包含值为“spaClient”的“client_id”参数。只需使用您选择的代码(例如 RegEx)解析 returnUrl 并从那里提取 client_id。我没有任何 WPF 经验,因此它的行为可能会有所不同并且不会传递此参数。
您可以使用您的代码片段从 IIdentityServerInteractionService
返回的 AuthorizationRequest
获取客户端 ID,如下所示:
var context = await mInteraction.GetAuthorizationContextAsync(returnUrl);
_vm.AllowedRememberMe = context.ClientId != "wpf";
但是,最好将此逻辑放在构造视图模型的 BuildLoginViewModelAsync
方法中,而不是在构造后设置 属性。