- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
查看类似的问题:Need access more user properties in User.Identity
我想创建自定义身份验证方法以与我的 Razor View 一起使用,以便轻松访问与 User.Identity 对象相关的 IdentityUser
属性,但我不确定如何去做。我想创建几个类似于 User.Identity.GetUserName()
、User.Identity.GetUserById()
等的自定义扩展...而不是使用此 ViewContextExtension方法。我的身份验证类型当前是来自 VS2013 MVC5 模板的默认类型 DefaultAuthenticationTypes.ApplicationCookie
。正如 Shoe 所说,我需要在用户登录后插入此声明。
我的问题是:
您如何以及在何处创建具有 IPrincipal 下 this IIdentity
输出参数的自定义声明?
这将允许我在 DDD 设置中的实体 View 中通过 CookieAuthentication 访问用户属性,其中我在使用 Identity 2.0 的单个应用程序中有多个 DbContext。我最终会使用 WebAPI,但现在我希望它尽可能简单。我找到了 this SO Q&A但它适用于使用票证的 Web 表单。也不确定门票和代币之间的区别?
这是当前使用来自基本 Controller 的 ViewContext
的方法:
查看:
@using Microsoft.AspNet.Identity
@using Globals.Helpers
@using Identity //custom Identity for Domain
@using Microsoft.AspNet.Identity.Owin
@if (Request.IsAuthenticated)
{
var url = @ViewContext.BaseController().GetAvatarUrlById(User.Identity.GetUserId<int>());
//...
}
BaseController.cs
public string GetAvatarUrlById(int id)
{
var user = UserManager.FindById(id);
return "../../" + user.ImageUrl;
}
Extensions.cs
public static class ViewContextExtension
{
public static BaseController BaseController(this ViewContext view)
{
var baseController = (BaseController)view.Controller;
return baseController;
}
}
我正在寻找的是在哪里以及如何寻找?
查看:
<img src="@User.Identity.GetAvatarUrl()" alt="User.Identity.GetAvatarUrl()" />
解决方案
我简单地编辑了 Extension.cs 文件并对用于 _LoginPartial.cshtml 的 Base Controller 使用继承并编辑了 ViewContextExtension
类:
#region ViewContextExt
public static class ViewContextExtension
{
public static BaseController BaseController(this ViewContext view)
{
var baseController = (BaseController)view.Controller;
return baseController;
}
public static string GetAvatarUrl(this IIdentity identity)
{
return ((ClaimsIdentity)identity).Claims.First(c => c.Type == "AvatarUrl").Value;
}
}
}
# endregion
最佳答案
MVC 中的 IIdentity
对象将成为与用户身份相对应的颁发 token 。这不同于您在代表用户的后端使用的任何对象或方法(比如 User
类)。如果您想使用用户的身份来获取自定义值,那么您需要在他们登录时(或在其他某个时间点)将其放入他们的声明对象(即身份 token )中。
您可以随时通过为用户提供身份来添加声明。
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim("PhoneNumber", "123-456-7890"));
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
当您将该声明插入到他们的 token 中时,您可以使用像这样的扩展方法检索它...
public static string GetPhoneNumber(this IIdentity identity)
{
return ((ClaimsIdentity)identity).FindFirstValue("PhoneNumber");
}
Razor
@using MyProject.Web.Extensions
<img src="@User.Identity.GetPhoneNumber()" />
关于c# - Identity 2.0 : Creating custom ClaimsIdentity eg: User. Identity.GetUserById<int>(int id) 用于每个请求验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683169/
我最近将我的 ASP.NET 应用程序从 Azure 的 Active Directory 配置切换到 ASP.NET Identity。我在本地测试时没有遇到任何问题,但当我发布到 Azure 时,
我正在使用 Katana for OAuth 从他的 LinkedIn 个人资料中获取有关用户的数据。我想将从 LinkedIn 收到的所有数据放入用户的 ClaimsIdentity 对象中,这样我
我有一个在 ASP.Net MVC 中构建的 HR Web 应用程序,分为多个区域,例如经理、员工。这些区域代表系统中能够执行不同任务的不同类型的用户。涉及遗留数据库,每种用户类型的信息存储在不同的表
我正在开发一个新应用程序并使用 ASP.NET Identity,想知道是否有一种方法可以在 ClaimsIdentity 上强制显示特定的声明类型。到目前为止,这是我所拥有的。它可以工作,但似乎这是
到目前为止,我找到了两种从 ClaimsIdentity 获取 WindowsIdentity 对象的解决方案。首先,我提取用户主体名称 (upn)。 ClaimsIdentity ci = (Cla
我正在使用 OpenId Connect 基于 Azure Active Directory 构建用户身份验证。我可以使用我在 AAD 中的帐户成功登录到我的网站。登录后,我想通过 AAD 图形 AP
我使用透明代理,是否可以将声明身份传递给另一个 WebAPI? 我有两个 WebAPI,演示和应用程序,都使用 ADFS 进行身份验证。 到目前为止,我的代码用于处理对应用程序 WebAPI 的表示请
首先,更广泛的背景。 我正在开发一个由单独的网络 API 支持的网络应用程序。 Web 应用程序中的身份验证应基于 ActiveDirectory,并且应由 Web API 处理。 因此,Web 应用
我已经使用 azure 使用 MVC3 设置了我的声明,并且一切顺利。 我现在需要做的是扩展当前线程/http上下文中的Claims Identity并添加我自己的信息(DOB,地址..之类的东西)
在 VS 2012/.NET 4.5/ASP.NET MVC 4 应用程序中,我有一个从 ClaimsIdentity 派生的自定义身份类型。它只是向基类添加了一些只读属性,以便于从一些声明中读取值:
刚刚开始我的第一个 .net core 2 网络应用程序实现。不幸的是,由于业务需求,用户必须通过遗留表单登录进行身份验证,用户名/密码被处理到 oracle 数据库,当用户通过身份验证时,将生成一个
我想使用 JWT 保护 ASP.NET Core Web API。此外,我希望可以选择直接在 Controller 操作属性中使用 token 负载中的角色。 现在,虽然我确实找到了如何将其与策略一起
我正在查看 ASP.NET MVC 5 身份验证的新内容,并注意到现在一切都是 claim 身份 .我想知道这些值存储在哪里: Session、Cache 或 Cookie 本身。 如果它存储在 co
我有一个遗留应用程序,我正在尝试更新它以使用带 Owin 身份验证的 MVC 5。但是,我一直在尝试让 SecurityStamp 验证正常工作。我可能遗漏了拼图的一些基本部分,但我无法弄清楚它是什么
我有一个使用 IdentityServer4.TokenValidation 进行身份验证的 ASP.NET Core 2.1 应用程序 authenticationBuilder.AddIdenti
我使用 .NET 4.5 创建了一个新的 ASP.NET MVC 应用程序。我已成功设置 STS 身份验证。身份验证流程工作正常,我能够在 Thread.CurrentPrincipal 上获取包含所
我有一个在 vs2010 中开发的现有 .Net 4 解决方案,它使用用于定义当前请求的用户的 IIdentity 实现。我现在想使用 vs2012 继续它的开发。 我在 vs2012 中打开了解决方
我的前端 Web 应用程序 (MVC) 使用不记名 key (SAML) 向 WCF 后端服务验证自身。身份验证工作正常并且 ClaimsIdentity 对象设置正确。但是,ClaimsIdenti
我有一个允许使用表单登录和 Windows 身份验证登录的 MVC 站点。我使用自定义 MembershipProvider 对用户进行 Active Directory 身份验证,使用 System
使用 Azure 和引用此服务的客户端 Windows 应用程序创建了一个 WCF 服务作为 WebRole。云服务是指使用 Windows Identity Foundation 中提供的“动手实验
我是一名优秀的程序员,十分优秀!