OpenId Connect + SPA +后端API +身份服务器

时间:2016-02-18 17:39:55

标签: angularjs openid-connect identityserver4

我有与后端API通信的SPA(angular.js)。我想要实现的是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&amp; id(在未经授权的重定向期间),在实际登录期间稍后使用(对于SignInResult)。

1)混合流是否最适合与Backend API一起使用的SPA?客户和客户都是这里的身份服务器是我们的,所以他们是值得信赖

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

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

4)这种方法(OpenId Connect的混合流程)能否与移动应用程序配合良好? (考虑到饼干,存储等)

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

写预览

0 个答案:

没有答案