我是ASPnet身份服务的新手,我们需要满足以下要求。
以下是架构设置
Appsever有
一个。实体框架
b。ASP.Net Web API2 Odata服务
c。授权服务器
ASP.Net MVC 5应用程序(访问App服务器的客户端)
流程需要
具有登录/注册表格的MVC5 Cleint应用程序
在注册/登录时,信息需要发送到应用服务器中的授权服务器,使用Identity Services进行授权并创建声明。
在授权服务器中创建身份后,客户端应用程序应登录
我知道从身份验证服务器获取承载令牌,并将其用作访问API服务的标头信息
我们所缺少的是MVC客户端应用程序应使用在授权服务器中创建的相同身份声明。
有什么方法可以访问在身份验证服务器中创建的声明。
我有一些有关如何在auth服务器中进行身份验证以及如何通过OWIN接收令牌的示例,并且可以从此令牌安全地访问API,但是我需要客户端Web应用程序需要基于令牌登录
我已经通过以下链接
另外,我也需要在登录后根据需要添加声明
我已经解决了以下问题,但是我不确定这是否有效
登录并检索承载令牌(此令牌应已分配了声明身份,例如用户名,角色等)。
在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帐户发送的信息)进行序列化
使用这些视图模型信息,将它们分配给本地存储,并使用(本例中的cookie)作为本地的标识
从网络应用程序注销时,也请保持注销webapi的权限。
如果您需要更多信息或代码,请告诉我
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句