我是ASPnet身份服务的新手,我们需要以下要求。
以下是架构设置
申请人有
一个。实体框架
湾ASP.Net Web API2 Odata服务
C。授权服务器
ASP.Net MVC 5应用程序(访问App服务器的客户端)
流程需要
MVC5 Cleint应用程序具有登录/注册表单
注册/登录时,信息需要发送到应用服务器的授权服务器,使用身份服务授权和创建声明。
在授权服务器中创建身份后,客户端应用程序应该已登录
我知道从身份验证服务器获取持有者令牌,并将其用作访问API服务的标头信息
我们所缺乏的是MVC客户端应用程序应该使用在授权服务器中创建的相同身份声明。
是否有办法访问在auth服务器中创建的声明。
我已经获得了一些关于如何在auth服务器中进行身份验证并通过OWIN接收令牌的示例,并且通过此令牌,我们可以安全地访问API,但我需要客户端Web应用程序需要基于令牌登录
我已经浏览了以下链接
此外,我还需要在登录后随时添加声明
答案 0 :(得分:1)
我已按如下方式解决此问题,但我不确定这是否是有效的方法
登录并检索持票人令牌后(此令牌应分配有声明身份,例如用户名,角色等)
在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;
}
从客户端,此肌动蛋白将通过令牌作为标题进行调用。
一旦我们获得了信息(采用Json字符串格式),需要使用javascript序列化器将UserInfoViewModel类(用户定义的viewmodel基于我们需要的信息并从webapi帐户发送)进行序列化
使用这些viewmodel信息,将它们分配到本地存储并使用(我的情况下的cookie)作为本地身份
当您从网络应用程序退出时,也要保持注销webapi。
如果您需要更多信息或代码,请与我们联系