Tag: 基于声明的身份

C#Owin登录在生产系统上生成identity = null

我有一个asp.net MVC 5 web项目,它在我的开发系统上运行良好。 但出于某种原因,在我的生产系统上部署解决方案后,使用Microsoft Owin和Facebook的登录就会停止工作。 回调总是检索…. error = access_denied作为参数,我追溯到owin为我的身份返回null的事实。 有什么线索在这里发生什么? UPDATE 我在我的Owin代码中实现了log4net,并且能够深入了解: Response status code does not indicate success: 400 (Bad Request). Stack trace: at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode() at Microsoft.Owin.Security.Facebook.FacebookAuthenticationHandlerd__0.MoveNext() 请注意,我已经修改了facebook应用以匹配制作url,回复等。 private void ConfigureAuth(IAppBuilder app) { var cookieOptions = new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString(“/Account/Login”) }; app.UseCookieAuthentication(cookieOptions); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); // Passive app.SetDefaultSignInAsAuthenticationType(cookieOptions.AuthenticationType); app.UseFacebookAuthentication(new […]

从ClaimsIdentity检索WindowsIdentity的最佳方法是什么

到目前为止,我发现了两个从ClaimsIdentity获取WindowsIdentity对象的解决方案。 首先,我提取用户主体名称(upn)。 ClaimsIdentity ci = (ClaimsIdentity) Thread.CurrentPrincipal.Identity; string upn = null; foreach (Claim c in ci.Claims) { if (c.ClaimType == ClaimTypes.Upn) { upn = c.Value; break; } } 只需使用upn调用WindowsIdentity的构造函数: WindowsIdentity winId =新的WindowsIdentity(upn); 使用声明到Windows令牌服务(c2WTS): WindowsIdentity winId = S4UClient.UpnLogon(upn); 解决方案1对我来说似乎更简单,更容易解决,但后来我不明白c2WTS的目的? 有什么建议? TNX!

如何从ClaimsPrinciple中删除现有声明?

我正在制作一个开发人员工具,用于模拟Intranet站点的Roles ,以允许开发人员根据需要快速充当任何Role 。 定义的角色是Developer, Team Lead, Team Member, Engineering, Marketing, Guest和网页上的工具调用Web Api来添加或删除Claim …我可以添加但似乎无法找到可以访问.RemoveClaim(claim)或.TryRemoveClaim(claim)以获得此function。 我是否必须创建自定义声明管理器才能获得此function,或者我是否遗漏了某些内容? 我一直在关注System.Security.Claims ,几乎所有其他东西似乎都非常简单,并且没有任何参考需要大量工作来完成我需要的工作。 我在.NET 4.5.1中使用VS 2013 / Web Api2。 网站方面只是使用简单的ajax调用PUT和DELETEfunction,直到我按照我想要的方式工作。 从Controller,我的cs代码如下: public void Put(int id, [FromBody]string role) { if (FindClaim(role) != null) return; var user = HttpContext.Current.User as ClaimsPrincipal; if (user == null) return; var claimId = new ClaimsIdentity(); claimId.AddClaim(new Claim(ClaimTypes.Role, role)); […]

System.Security.Claims命名空间的成员不可用?

我正在学习.NET 4.5中新的基于声明的身份validation方法,并且正在使用Console应用程序来实现这一点。 根据MSDN,ClaimsAuthenticationManager是System.Security.Claims命名空间的成员。 正如你在这里看到的,我没有得到这个选项。 我确定该项目使用的是.NET 4.5。 我在这里想念一些简单的东西……有人有什么建议吗?

用户角色使用ASP.NET Core Identity 3的权限

我坚持使用我想在asp.net mvc核心应用程序中提供的解决方案。 我想在Web应用程序中提供标准用户,角色,权限的解决方案,以利用新的基于声明的方法。 我一直在关注Ben Foster的逻辑( http://benfoster.io/blog/asp-net-identity-role-claims )。 在下面的代码(演示质量)中,我将阐述我的方法,我将评论以帮助显示我快速而肮脏的测试解决方案。 我遇到的挑战是它不起作用。 //注意:我发现了这个错误,并会在未来用户寻找类似解决方案的地方发表评论。 种子类:这是一个快速而肮脏的解决方案,用两个新用户,两个角色和一个角色的一些声明为数据库播种。 我这样做是一个测试应用程序,用于学习管理我的应用程序授权的声明方法。 我的完整解决方案将为每个租户提供一种方式,通过UI创建自己的角色,将1个或多个声明与角色相关联,然后为用户分配角色。 我想为租户提供一种管理自己用户以及他们能做什么或不做什么的方法。 这是基于声明的方法的简单实现,因为权利要求比与策略的1:1关系具有更多的权力。 public class DbInitializer { private ApplicationDbContext _context; private RoleManager _roleManager; private UserManager _userManager; public DbInitializer(ApplicationDbContext context,RoleManager roleManager, UserManager userManager) { _roleManager = roleManager; _userManager = userManager; _context = context; } public async Task Initialize() { //RoleManager roleManager = new RoleManager(); […]

.NET Framework中的复杂声明值与System.Security.Claims

我正在使用Asp.Net 5 MVC,Owin和Oauth2 bearer token作为auth类型开发一个Web应用程序。 按照本指南将Json序列化的自定义复杂声明成功添加到Microsoft.IdentityModel.Claims.ClaimsIdentity实例,我尝试使用System.Security.Claims命名空间上的ClaimsIdentity复制相同的示例。 不幸的是,似乎将一个complexClaim添加到ClaimsIdentity实例,派生的类类型信息将丢失,并且声明将存储为System.Security.Claims.Claim 。 var complexClaim = new ComplexClaim(@”http://it.test/currentpassport”, passport); var claims = new List() { complexClaim }; identity.AddClaims(claims); 当我尝试从身份中取回声明时,将其转换为ComplexClaim Type会产生空值。 var passportClaim = identity.Claims.FirstOrDefault(c=>c.Type == @”http://it.test/currentpassport”) as ComplexClaim; 相同的示例使用Microsoft.IdentityModel.Claims完美运行。 任何提示? 这是完整的移植代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using System.Security.Claims; namespace ConsoleApplication1 { class Program […]

Sharepoint 2013中的联合身份validation:获取rtFa和FedAuth cookie

场景如下:我需要对用户(使用他的大学帐户)执行联盟身份validation到他大学的Sharepoint站点,并获得FedAuth和rtFa cookie (我必须将其传递给SharePoint REST webservices)为了访问资源)。 我做了一些尝试,但每个问题至少有一个问题: 1)使用Microsoft.SharePoint.Client库 ClientContext context = new ClientContext(host); SharePointOnlineCredentials creds = new SharePointOnlineCredentials(user, passw); context.Credentials = creds; Uri sharepointuri = new Uri(host); string authCookie = creds.GetAuthenticationCookie(sharepointuri); Web web = context.Web; context.Load(web, w=>w.Lists); context.ExecuteQuery(); fedAuthString = authCookie.Replace(“SPOIDCRL=”, string.Empty); 这样我设法获得FedAuth cookie,但我无法获得rtFa cookie 。 我怎么能在这一点上获得rtFa cookie? 我是否可以拦截此类操作中涉及的HTTP请求(即context.ExecuteQuery()) – 其中可能包含标题中的rtFa cookie? 或者,我是否可以通过仅利用FedAuth cookie获得rtFa cookie? 2)使用MsOnlineClaimsHelper […]

使用MVC5和OWIN的自定义标识

我尝试使用MVC5和OWIN身份validation为Web站点的ApplicationUser添加自定义属性。 我已经阅读了https://stackoverflow.com/a/10524305/264607 ,我喜欢它与基本控制器的集成方式,以便于访问新属性。 我的问题是,当我将HTTPContext.Current.User属性设置为我的新IPrincipal时,我得到一个空引用错误: [NullReferenceException: Object reference not set to an instance of an object.] System.Web.Security.UrlAuthorizationModule.OnEnter(Object source, EventArgs eventArgs) +127 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69 这是我的代码: protected void Application_PostAuthenticateRequest(Object sender, EventArgs e) { if (HttpContext.Current.User.Identity.IsAuthenticated) { userManager = new UserManager(new UserStore(new ApplicationDbContext())); ApplicationUser user = userManager.FindByName(HttpContext.Current.User.Identity.Name); PatientPortalPrincipal newUser = new PatientPortalPrincipal(); newUser.BirthDate = […]

参考摘要validation失败

我实现了自定义STS。 经过身份validation和重定向但在页面加载之前,我会收到此错误: [CryptographicException: Digest verification failed for Reference ‘#_8e0aea1a-713d-4536-8fac-a768073395e9’.] 每次尝试时参考编号都会改变。

无法添加和获取自定义声明值

我正在使用带有身份2.0的mvc 5。 我想在应用程序上使用自定义声明值,但我得到null值。 我究竟做错了什么? 更新的代码 帐户控制器中的登录代码 if (!string.IsNullOrEmpty(model.UserName) && !string.IsNullOrEmpty(model.Password)) { AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); var result = SignInManager.PasswordSignIn(model.UserName, model.Password, model.RememberMe, shouldLockout: false); //Generate verification token Dictionary acceccToken = null; if (SignInStatus.Success == 0) { var userDeatails = FindUser(model.UserName, model.Password).Result; if (userDeatails != null) acceccToken = GetTokenDictionary(model.UserName, model.Password, userDeatails.Id); } if (model.RememberMe) { HttpCookie userid = new HttpCookie(“rembemberTrue”, […]