Search code examples
asp.net-mvcidentityserver4

How to Access Client_id of Calling Client in Identity Server 4 Controller


I am using Identity Server 4 for authentication for both a website and WPF application. On the website, I want users to have the ability to check a Remember Me box when signing in, but I don't want that for the WPF application. I have the logic to disable that checkbox on the front end, but am having trouble in my controller. I have this function

[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);  
} 

This controller contains

private readonly IIdentityServerInteractionService mInteraction;
private readonly IClientStore mClientStore;
private readonly IAuthenticationSchemeProvider mSchemeProvider;
private readonly IEventService mEvents;

Any help would be appreciated


Solution

  • You can get the client id from the AuthorizationRequest returned from the IIdentityServerInteractionService as follows using your code snipet:

    var context = await mInteraction.GetAuthorizationContextAsync(returnUrl);
    _vm.AllowedRememberMe = context.ClientId != "wpf";
    

    However, you would be better off placing this logic in your BuildLoginViewModelAsync method where the view model is constructed rather than setting the property after construction.