Tag: owin

HttpContext.GetOwinContext()。GetUserManager ()返回null

我使用ASP.NET Identity 2来创建角色但是HttpContext.GetOwinContext().GetUserManager()的结果HttpContext.GetOwinContext().GetUserManager()为null。 然后我无法创建角色。 我怎么解决这个问题? public class MVCController : Controller { public MVCController() { } public AppRoleManager RoleManager // returns null ?! { get { return HttpContext.GetOwinContext().GetUserManager(); } } public User CurrentUser { get { string currentUserId = User.Identity.GetUserId(); User currentUser = DataContextFactory.GetDataContext().Users.FirstOrDefault(x => x.Id.ToString() == currentUserId); return currentUser; } } public IAuthenticationManager AuthManager { […]

Owin,在身份validation请求中传递自定义查询参数

我们有自己的OpenID Connect Provider。 我们希望使用Owin中间件在身份validation请求中传递自定义查询参数。 我们无法找到使用Microsoft.Owin.Security.OpenIdConnect程序集实现此方法的方法。 甚至我们也找不到如何向Authentication Request添加标准请求参数(例如“ login_hint parameter”)。 例如,Google有“ login_hint ”和“ hd ”参数( https://developers.google.com/accounts/docs/OAuth2Login#sendauthrequest ),我们希望拥有几乎相同的参数。 但我们甚至无法找到如何使用Owin将这些参数发送给Google。 试过这段代码: var googleOptions = new GoogleOAuth2AuthenticationOptions() { ClientId = “…”, ClientSecret = “…”, }; app.UseGoogleAuthentication(googleOptions); … public ActionResult ExternalLogin(string provider) { var ctx = Request.GetOwinContext(); var properties = new AuthenticationProperties(); properties.Dictionary.Add(“login_hint “, “myemail@gmail.com”); properties.Dictionary.Add(“hd”, “hd”); ctx.Authentication.Challenge(properties, provider); return […]

为什么缓存访问令牌在oauth2中被认为是错误的?

我正在关注此文章以撤消用户访问权限: Enable OAuth Refresh Tokens in AngularJS App using ASP .NET Web API 2, and Owin 现在考虑validation用户后我已经发布了一个30分钟的生命周期的accessstoken,如上文所示,并且刷新令牌为1天,但如果管理员在10分钟内删除该用户20分钟仍然如此,那么现在我需要撤消该用户的访问权限。 为了做到这一点,我需要从刷新令牌表中删除该用户条目以禁止进一步的访问令牌请求,但由于accessstoken到期时间仍然是20分钟,因此用户将能够访问完全错误的受保护资源。 所以我想实现缓存机制来缓存服务器上的访问令牌并保存在数据库中 。 因此,当该用户被撤销时,我可以简单地从缓存和数据库中删除该用户条目,以阻止该用户访问访问受保护资源。 但是下面这两个答案说这不是oauth2的设计方式: 撤消OAuthBearerAuthentication的访问令牌 OAuth2 – 刷新令牌不必要的复杂性 所以我的问题是: 1)为什么缓存访问令牌不被认为比刷新令牌机制更好,也是一种糟糕的方法? 我的第二个问题是基于@Hans Z给出的以下答案,其中他说: 这必然涉及资源服务器(RS)咨询授权服务器(AS),这是一个巨大的开销。 2)如果撤销用户的访问权限,为什么RS会咨询AS,因为AS仅用于validation用户并根据本文生成访问令牌? 3)在文章中只有2个项目: Authentication.api – validation用户并生成访问令牌 资源服务器 – 借助[Authorize]属性validationaccesstoken 在上述情况下,授权服务器呢? 更新:我决定使用刷新令牌撤消用户访问以防用户被删除,并且当用户注销时我将刷新令牌刷新令牌表因为您要求我们在用户点击注销后立即注销用户。 但这里的问题是我有250个与用户相关的角色,所以如果我把角色放在accesstoken中,那么accesstoken的大小将是如此巨大,我们无法从头部传递如此巨大的accessstoken但我无法查询角色以validation每次端点的用户访问权限调用端点。 所以这是我面临的另一个问题。

如何在OWIN主机下解析文件的虚拟路径?

在ASP.NET和IIS下,如果我有“〜/ content”forms的虚拟路径,我可以使用MapPath方法将其解析为物理位置: HttpContext.Server.MapPath(“~/content”); 如何在OWIN主机下解析到物理位置的虚拟路径?

如何在aspnet身份中进行会话管理?

我使用Asp.net身份 登录,注册,忘记密码等,源代码取自以下链接: http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity 。 现在我有一个UserMaster表,在注册期间我要求以下字段: FullName,EmailId,Password,ContactNumber,Gender 。 我的UserMaster包含以下字段: Id,FullName,EmailId,ContactNumber,Gender 现在,当用户提交注册表格时,此FullName,EmailId,ContactNumber,Gender将与电子邮件一起保存在UserMaster中 ,密码将保存在AspnetUser中 。 我的注册方法与上面2个链接中提供的方法相同。 在这里您可能会注意到我的UserMaster和AspnetUser之间没有任何关系,因此在登录时用户将输入他的电子邮件ID登录我将使用此方法await SignInManager.PasswordSignInAsyncvalidation用户,如果此方法返回成功,那么我将要做的是使用此电子邮件ID并在我的UserMaster中查看此电子邮件,如果找到匹配,我将从UserMaster获取UserId并将其存储在会话中并使用我的登录方法使用我的应用程序,如下所示: public async Task Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } // This doesn’t count login failures towards account lockout // To enable password failures to trigger account lockout, change to shouldLockout: true var result = […]

从OWIN Middleware更改响应对象

我的OWIN中间件就是这样的。 (Framework是ASP.NET Web API)。 public class MyMiddleware : OwinMiddleware { public MyMiddleware(OwinMiddleware next) : base(next) { } public override async Task Invoke(OwinRequest request, OwinResponse response) { var header = request.GetHeader(“X-Whatever-Header”); await Next.Invoke(request, response); response.SetHeader(“X-MyResponse-Header”, “Some Value”); response.StatusCode = 403; } } 问题: 是从OwinMiddleware派生的推荐做法吗? 我看到在Katana源代码中,一些中间件类派生自OwinMiddleware而OwinMiddleware一些则不是。 我可以看到请求标头没问题。 Next.Invoke在我的中间件之后设置响应头或状态代码对返回给客户端的响应没有影响。 但是,如果我在Next.Invoke调用之前设置响应标头或状态,则带有标头的响应和我设置的状态将返回给客户端。 设置这些的正确方法是什么?

MVC – 混合身份validation – OWIN + Windows身份validation

我需要同时具有Windows身份validation和owin(表单)身份validation,但我无法让它工作。 可能最好的选择是让两个站点具有不同的身份validation方法。 我找到了一个能满足我需求的项目: MVC5-MixedAuth 。 但它使用IISExpress,我无法让它与本地IIS一起使用。 发生的错误是: 在Web服务器上配置请求筛选以拒绝请求,因为查询字符串太长。 如果我删除Startup.Auth.cs中的所有ConfigureAuth()方法,它不会抛出错误但我无法登录,因为它需要进行CookieAuthentication 。 Startup.Auth.cs: public void ConfigureAuth(IAppBuilder app) { app.CreatePerOwinContext(dbEmployeePortal.Create); app.CreatePerOwinContext(ApplicationUserManager.Create); app.CreatePerOwinContext(ApplicationSignInManager.Create); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString(“/Account/Login”), Provider = new CookieAuthenticationProvider { OnValidateIdentity = SecurityStampValidator.OnValidateIdentity ( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager), getUserIdCallback: (id) => (Int32.Parse(id.GetUserId())) ) } }); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); […]

owin认证的当前用户

我开始为移动应用程序构建一个web api,并且我很难实现身份validation。 我使用Bearer,虽然一切都应该没问题,但我无法让当前用户从控制器中获取动作。 HttpContext.Current.User.Identity.Name为null(同样是HttpContext.Current.User.Identity.GetUserId())的结果。 以下是重要代码: Startup.cs: public partial class Startup { public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); ConfigureAuth(app); WebApiConfig.Register(config); app.UseWebApi(config); } } Startup.Auth.cs public partial class Startup { static Startup() { OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString(“/token”), Provider = new ApplicationOAuthProvider(), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), AllowInsecureHttp = true }; […]

Azure B2C GetOwinContext()。Authentication.Challenge使用问号而不是And符号创建错误的URL

我正在使用Azure B2C,我在https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapp-dotnet上使用该项目作为启动指南。 我设法通过使用我的客户端ID,租户ID等替换配置条目来运行此示例。但是,当我尝试将Azure B2C身份validation添加到我当前的Web应用程序(Asp.NET MVC dot net 4.5)时,它表现得很好奇怪的方式。 当我按下登录时,它会将我重定向到与工作样本中的URL略有不同的URL。 它会在政策后用问号/授权替换和签名?p = b2c_1_signin ***?*** client_id 这是策略URL在Azure B2C门户窗口中显示的方式: https : //login.microsoftonline.com/XXX.onmicrosoft.com/oauth2/v2.0/authorize?p= B2C_1_SignIn&client_id = XXXX&nonce = defaultNonce&redirect_uri =https%3A %2F%2Flocalhost%3A44316%2F&范围=的OpenID&RESPONSE_TYPE = id_token&提示=登录 然而,这是我的应用程序奇怪地重定向到的URL:#login.microsoftonline.com/XXX.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1_signin?client_id=XXXXX&redirect_uri=https%3a%2f%2flocalhost%3a44316 %2F&response_mode = form_post&RESPONSE_TYPE = id_token&范围=的OpenID&状态= OpenIdConnect.AuthenticationProperties%3d1dRzpEoUYWC8q6vPoGU3VtcY7wXXmMDVlkWqr8aQLvWqv64IWeGE0jUnQ6chCZBWEo55uYHsSD27R6EjKIlEaEQWdH6dgIrNDj_n234nLkHb7bKsToir8Yr8j7gbXPb7dBG00wlOufyOfXRT29owsOzjJ8WWwguWDWlo2MN3McsuIWflDKup5qCtQTUS71RBGAEbcQJ_1BqFxIUZsbTglEg4KGm-mroT0tz7PGDcRQU&随机数= 636311347285953639.YzQyOWNmYjQtNzAxOS00MTBmLTlkYzQtZGM4MjNlNjdjYThlM2ZlMWMxZGEtYWE0MS00YzY3LWFiM2MtZDgyZWNiNGUxOWQ0 我完全从工作样本中复制了代码,但它没有用。 我甚至从头开始创建了一个全新的mvc项目,我从示例项目中复制了代码,但它仍然无效。 当它重定向到该URL时,它显示404 – 未找到文件或目录。 您要查找的资源可能已被删除,名称已更改或暂时不可用。 我很确定答案是非常明显的,我会看起来非常愚蠢,但我在这里拉头发,任何输入都非常感激。

在MVC 5 Dot Net Identity中扩展IdentityUserRole后,UserManager.GetRoles不起作用

我通过添加外键列扩展了IdentityUserRole,现在我无法授权或检索角色信息。 可以请任何人帮我解决这个问题。 我的IdentityUserRole有一个来自AspNetApplications表的外键列,IdentityUserRole扩展名如下 public class AspNetUserRoles : IdentityUserRole { [Key] public string ApplicationId { get; set; } [ForeignKey(“ApplicationId”)] public AspNetApplications AspNetApplications { get; set; } } 添加迁移后,我可以看到在AspNetUserRoles表中创建了外键列。 该表的屏幕截图如下 在这里,我有两个问题要问 为什么它创建了一个自动Discriminator列以及如何删除它,如果它有任何开销。 为了让我的授权和UserManager.GetRoles在执行此扩展之前工作,我需要做多少工作。