ASPNet身份验证MVC5客户端网站 - >验证服务器 - > Web API服务器

时间:2014-05-29 13:39:48

标签: asp.net-mvc asp.net-identity owin asp.net-web-api2

我是ASPnet身份服务的新手,我们需要以下要求。

以下是架构设置

1。应用服务器

申请人有 一个。实体框架
湾ASP.Net Web API2 Odata服务
C。授权服务器

2。网络服务器

ASP.Net MVC 5应用程序(访问App服务器的客户端)

流程需要

  1. MVC5 Cleint应用程序具有登录/注册表单

  2. 注册/登录时,信息需要发送到应用服务器的授权服务器,使用身份服务授权和创建声明。

  3. 在授权服务器中创建身份后,客户端应用程序应该已登录

  4. 我知道从身份验证服务器获取持有者令牌,并将其用作访问API服务的标头信息

  5. 我们所缺乏的是MVC客户端应用程序应该使用在授权服务器中创建的相同身份声明。

    是否有办法访问在auth服务器中创建的声明。

    我已经获得了一些关于如何在auth服务器中进行身份验证并通过OWIN接收令牌的示例,并且通过此令牌,我们可以安全地访问API,但我需要客户端Web应用程序需要基于令牌登录

    我已经浏览了以下链接

    http://blogs.msdn.com/b/webdev/archive/2013/09/20/understanding-security-features-in-spa-template.aspx

    此外,我还需要在登录后随时添加声明

1 个答案:

答案 0 :(得分:1)

我已按如下方式解决此问题,但我不确定这是否是有效的方法

  1. 登录并检索持票人令牌后(此令牌应分配有声明身份,例如用户名,角色等)

  2. 在web api AccountController中,需要创建一个方法来检索客户端Web应用程序所需的默认声明。请查看以下内容

    [Authorize]
    [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
    [Route("UserInfo")]
    public UserInfoViewModel GetUserInfo()
    {
        var firstname = ((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type.Equals("FirstName")).SingleOrDefault();
        var lastname = ((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type.Equals("LastName")).SingleOrDefault(); 
    
        var IsApproved = ((ClaimsIdentity)User.Identity).Claims.Where(c => c.Type.Equals("IsApproved")).SingleOrDefault();
    
        var userinfo = new UserInfoViewModel
        {
            UserName = User.Identity.GetUserName(),
            FirstName = firstname.Value.ToString(),
            LastName = lastname.Value.ToString(),
            UserApproved = Convert.ToBoolean(IsApproved.Value.ToString()),
            HasRegistered = externalLogin == null,
            LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
        };
    
        return userinfo;
    }
    
  3. 从客户端,此肌动蛋白将通过令牌作为标题进行调用。

  4. 一旦我们获得了信息(采用Json字符串格式),需要使用javascript序列化器将UserInfoViewModel类(用户定义的viewmodel基于我们需要的信息并从webapi帐户发送)进行序列化

  5. 使用这些viewmodel信息,将它们分配到本地存储并使用(我的情况下的cookie)作为本地身份

  6. 当您从网络应用程序退出时,也要保持注销webapi。

  7. 如果您需要更多信息或代码,请与我们联系