Authentication 使用IdentityServer4(无登录页)对用户进行身份验证

Authentication 使用IdentityServer4(无登录页)对用户进行身份验证,authentication,xamarin.forms,identityserver4,Authentication,Xamarin.forms,Identityserver4,我们使用WebView实现方法构建了一个Xamarin.Forms应用程序,该应用程序作为IdentityServer4客户端运行,效果非常好。但是,苹果不会在商店中接受我们的应用程序,因为他们希望在应用程序中进行身份验证和创建新帐户。因此,我一直在尝试将在应用程序登录屏幕中输入的凭据发布到IdentityServer,希望可以模拟用户输入凭据并提交(发布)登录页面时发生的相同过程: public async Task<IActionResult> Authenticate([Fr

我们使用WebView实现方法构建了一个Xamarin.Forms应用程序,该应用程序作为IdentityServer4客户端运行,效果非常好。但是,苹果不会在商店中接受我们的应用程序,因为他们希望在应用程序中进行身份验证和创建新帐户。因此,我一直在尝试将在应用程序登录屏幕中输入的凭据发布到IdentityServer,希望可以模拟用户输入凭据并提交(发布)登录页面时发生的相同过程:

 public async Task<IActionResult> Authenticate([FromBody] UserLoginViewModel model)
    {
        String result = String.Empty;

        try
        {
            if (!string.IsNullOrWhiteSpace(model.UserName))
            {
                UserKey user = await _userManager.FindByNameAsync(model.UserName.ToLowerInvariant());

                if (String.IsNullOrEmpty(user?.SSID))
                { result = AuthenticateResultEnum.UserDoesNotExist.ToString(); }
                else
                {
                    var signin_result = await _signInManager.PasswordSignInAsync(user, model.Password, model.RememberLogin, false);
                    if (signin_result.Succeeded)
                    {
                        if (_interactionService.IsValidReturnUrl(model.ReturnUrl))
                        {
                            LocalRedirect(model.ReturnUrl);
                        }
                    }
                    else if (signin_result.IsLockedOut)
                    { result = AuthenticateResultEnum.AccountLocked.ToString(); }
                }
            }
        }
        catch (Exception ex)
        {
            result = AuthenticateResultEnum.Error.ToString();
            _logger.ExceptionAsync(ex);
        }

        return new JsonResult(result);
    }
public异步任务身份验证([FromBody]UserLoginViewModel模型)
{
字符串结果=String.Empty;
尝试
{
如果(!string.IsNullOrWhiteSpace(model.UserName))
{
UserKey user=wait_userManager.FindByNameAsync(model.UserName.ToLowerInvariant());
if(String.IsNullOrEmpty(user?.SSID))
{result=AuthenticateResultEnum.UserDoesNotExist.ToString();}
其他的
{
var-signin\u result=wait\u-signInManager.PasswordSignInAsync(user,model.Password,model.RememberLogin,false);
如果(登录结果成功)
{
if(_interactionService.IsValidReturnUrl(model.ReturnUrl))
{
LocalRedirect(model.ReturnUrl);
}
}
else if(签名结果IsLockedOut)
{result=AuthenticateResultEnum.AccountLocked.ToString();}
}
}
}
捕获(例外情况除外)
{
结果=AuthenticateResultEnum.Error.ToString();
_记录器。例外同步(ex);
}
返回新的JsonResult(result);
}
然而,由于涉及到所有重定向,我在这个过程中没有运气。是否有一种成熟的方法可以使用IdentityServer对用户进行身份验证,而不显示登录页面,而是从应用程序登录表单发布凭据和授权请求?其他著名的应用程序似乎也能做到这一点,我只是想确认一下,IdentityServer4可以做到这一点

谢谢,,
安德鲁

我想你在寻找的是流动。您是否“拥有”用户?即Identity Server和应用程序都是您的,还是Identity Server来自其他人?请使用safari view controller或ne SFAuthenticatedSession让Apple满意。感谢您的建议@Mashton,我们确实拥有应用程序和Identity Server实现。我将按照您的建议调查ResourceOwnerPassword流程。感谢您的快速回复@leastprivilege,Apple确实提到使用Safari View Controller,但他们也表示他们更喜欢在应用程序内部执行身份验证和新帐户创建。不过,我仍会研究你在评论中提到的两项建议。感谢您在IdentityServer上的持续工作,非常感谢。