我有SPA(angular.js)与后端API通信 . 我想要实现的是OpenId Connect的Hybrid流程,它将为API发布身份令牌(登录用户)并为SPA设置角色 .

我是根据这个样本做的 - https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev/Mvc/src/IdSvrHost

如果我将[Authorize]属性放在某个控制器上并尝试访问它,这一切都很有效 - 我正被重定向到登录屏幕并且可以登录 . 我正在使用AspNet OpenId Connect中间件来记录用户并访问他的声明 .

问题是我想要一个简单的登录屏幕,在未经授权的用户之后没有重定向(即第一次用户进入应用程序并点击“登录”按钮) .

我无法理解的是这个(来自上面提到的示例,LoginController.cs):

[HttpGet(Constants.RoutePaths.Login, Name = "Login")]
    public async Task<IActionResult> Index(string id)
    {
        var vm = new LoginViewModel();

        if (id != null)
        {
            var request = await _signInInteraction.GetRequestAsync(id);
            if (request != null)
            {
                vm.Username = request.LoginHint;
                vm.SignInId = id;
            }
        }

        return View(vm);
    }

登录屏幕获取此SignInId cookie&id(在未经授权的重定向期间),以后在实际登录期间使用(对于SignInResult) .

1)Hybrid流量最适合与Backend API一起使用的SPA吗?这里的客户端和身份服务器都是我们的,因此他们是值得信任的 .

2)如果没有必要使用SignInId,那么使用空白登录表单实现混合流的方法是什么?

3)如果需要SignInId,那么有什么可能是空白登录屏幕和使用这种方法的工作流程?遗憾的是,使用[授权]重定向是我现在看到的唯一选项

4)这种方法(OpenId Connect的混合流程)能否与移动应用程序协同工作? (考虑到 Cookies ,存储等)

5)目前Identity Server位于另一个项目(我的API旁边)中 - 如果API和Identity Server都在同一个项目中(自托管)或者这不会影响任何内容,会有什么变化吗? @kapoc

写预览