标签: asp.net-identity

ASP.NET标识 - HttpContext没有GetOwinContext的扩展方法

我已经从这里下载并成功运行了ASP.NET Identity示例:https: //github.com/rustd/AspnetIdentitySample

我现在正在我的项目中实现ASP.NET Identity框架,并遇到了一个问题,这让我整天都疯了......

GetOwinContext() 不存在作为我的扩展方法 HttpContext

我正在类库中实现身份框架.我已经安装了Identity框架的所有最新版本(预发布版本),除此之外的所有内容都正常工作.

我尝试在我的控制器中实现与直接相同的代码,并找到相同的问题.

我显然错过了某个地方的参考,虽然我不知道是什么..!..

杀死我的代码块是:

private IAuthenticationManager AuthenticationManager
{
    get
    {
        return HttpContext.GetOwinContext().Authentication;
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加了对以下内容的引用 - 在我的类库中尝试了这些并且也直接在控制器上,它们都不适合我...

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;
Run Code Online (Sandbox Code Playgroud)

......这让我起了墙......任何想法?

UPDATE

我已经检查了示例中Identity和OWIN的版本,并确保我的解决方案中有相同的版本.

更重要的是,如果我在样本上搜索对象浏览器,GetOwinContext我可以找到该方法,但是当我在我的解决方案中搜索它时,无处可寻......我必须有一些库过时,但我可以'找到它!

c# asp.net asp.net-mvc asp.net-identity

367
推荐指数
9
解决办法
15万
查看次数

ASP.NET MVC 5 - 身份.如何获取当前的ApplicationUser

我的项目中有一个Article实体,其中包含ApplicationUser名为的属性Author.如何获取当前记录的完整对象ApplicationUser?在创建新文章时,我必须将Author属性设置Article为当前属性ApplicationUser.

在旧的成员机制中它很简单,但在新的身份识别方法中,我不知道如何做到这一点.

我试着这样做:

  • 为身份扩展添加using语句: using Microsoft.AspNet.Identity;
  • 然后我尝试获取当前用户: ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == User.Identity.GetUserId());

但我得到以下异常:

LINQ to Entities无法识别方法'System.String GetUserId(System.Security.Principal.IIdentity)'方法,并且此方法无法转换为商店表达式.来源=的EntityFramework

c# identity asp.net-mvc-5 asp.net-identity

229
推荐指数
6
解决办法
29万
查看次数

如何在使用ASP.NET标识时更改表名?

我正在使用Visual Studio 2013的发布版本(RTM,而不是RC)(从MSDN 2013-10-18下载),因此使用AspNet.Identity的最新版本(RTM).当我创建一个新的Web项目时,我选择"个人用户帐户"进行身份验证.这将创建以下表:

  1. AspNetRoles
  2. AspNetUserClaims
  3. AspNetUserLogins
  4. AspNetUserRoles
  5. AspNetUsers

当我注册一个新用户(使用默认模板)时,会创建这些表(如上所列),并且AspNetUsers表中插入了一条记录,其中包含:

  1. ID
  2. 用户名
  3. PasswordHash
  4. SecurityStamp
  5. 鉴别

此外,通过向"ApplicationUser"类添加公共属性,我已成功向AspNetUsers表添加了其他字段,例如"FirstName","LastName","PhoneNumber"等.

这是我的问题.有没有办法更改上面表格的名称(首次创建时)或者它们是否总是以AspNet我上面列出的前缀命名?如果表名可以不同的名称,请解释如何.

- 更新 -

我实施了@Hao Kung的解决方案.它确实创建了一个新表(例如我称之为MyUsers),但它仍然创建了AspNetUsers表.目标是用"MyUsers"表替换"AspNetUsers"表.请参阅下面的代码和创建的表的数据库图像.

我实际上想AspNet用我自己的名字替换每个表...例如,MyRoles,MyUserClaims,MyUserLogins,MyUserRoles和MyUsers.

我如何实现这一目标,最终只有一组表格?

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-identity

206
推荐指数
5
解决办法
9万
查看次数

ASP.NET身份DbContext混淆

默认的MVC 5 App附带了IdentityModels.cs中的这段代码 - 这段代码用于默认模板的所有ASP.NET Identity操作:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用带有Entity Framework的视图构建一个新控制器并在对话框中创建一个"新数据上下文...",我会为我生成这个:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace WebApplication1.Models
{
    public class AllTheOtherStuffDbContext : DbContext
    {
        // You can add custom code to this file. Changes will not be overwritten.
        // 
        // If you want Entity Framework to drop and regenerate your database
        // automatically whenever you change your model schema, please use data migrations.
        // …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc entity-framework asp.net-mvc-5 asp.net-identity

185
推荐指数
4
解决办法
11万
查看次数

未经授权的webapi呼叫返回登录页面而不是401

如何配置我的mvc/webapi项目,以便从剃刀视图调用的webapi方法在未经授权时不返回登录页面?

它是一个MVC5应用程序,它也有通过javascript调用的WebApi控制器.

以下两种方法

[Route("api/home/LatestProblems")]      
[HttpGet()]
public List<vmLatestProblems> LatestProblems()
{
    // Something here
}

[Route("api/home/myLatestProblems")]
[HttpGet()]
[Authorize(Roles = "Member")]
public List<vmLatestProblems> mylatestproblems()
{
   // Something there
}
Run Code Online (Sandbox Code Playgroud)

通过以下角度代码调用:

angular.module('appWorship').controller('latest', 
    ['$scope', '$http', function ($scope,$http) {         
        var urlBase = baseurl + '/api/home/LatestProblems';
        $http.get(urlBase).success(function (data) {
            $scope.data = data;
        }).error(function (data) {
            console.log(data);
        });
        $http.get(baseurl + '/api/home/mylatestproblems')
          .success(function (data) {
            $scope.data2 = data;
        }).error(function (data) {
            console.log(data);
        });  
    }]
);
Run Code Online (Sandbox Code Playgroud)

所以我没有登录,第一个方法成功返回数据.第二种方法返回(在成功函数中)包含等效登录页面的数据.也就是说,如果你请求一个标有[授权]并且你没有登录的控制器动作,你会在mvc中获得什么.

我希望它返回401未授权,以便我可以根据用户是否登录显示不同的数据.理想情况下,如果用户已登录,我希望能够访问Controller的用户属性,以便我可以返回特定于该成员的数据.

更新:由于下面的建议似乎都不再适用(对Identity或WebAPI的更改)我在github上创建了一个原始示例,它应该说明问题.

c# asp.net-web-api owin asp.net-mvc-5 asp.net-identity

176
推荐指数
8
解决办法
8万
查看次数

什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?

看看ASP.NET Identity(ASP.NET中的新成员实现),我在实现自己的时遇到了这个界面UserStore:

//Microsoft.AspNet.Identity.Core.dll

namespace Microsoft.AspNet.Identity
{ 
    public interface IUserSecurityStampStore<TUser> :
    {
        // Methods
        Task<string> GetSecurityStampAsync(TUser user);
        Task SetSecurityStampAsync(TUser user, string stamp);
    }
}
Run Code Online (Sandbox Code Playgroud)

IUserSecurityStampStore由默认实现EntityFramework.UserStore<TUser>,实质上获取和设置TUser.SecurityStamp属性.

经过一些挖掘之后,似乎a SecurityStampGuid在关键点新生成的UserManager(例如,更改密码).

因为我在Reflector中检查这段代码,所以我无法真正破译.几乎所有的符号和异步信息都已经过优化.

此外,谷歌也没有太多帮助.

问题是:

  • 什么是SecurityStampASP.NET标识,它用于什么?
  • SecurityStamp创建身份验证cookie时,是否扮演任何角色?
  • 是否有任何需要采取的安全措施或预防措施?例如,不要将此值向下游发送给客户端?

更新(2014年9月16日)

源代码在这里:

asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

168
推荐指数
3
解决办法
6万
查看次数

如何获取当前用户,以及如何在MVC5中使用User类?

  • 如何在MVC 5中获取当前登录用户的ID ?我尝试了StackOverflow的建议,但它们似乎不适用于MVC 5.
  • 另外,为用户分配东西的MVC 5最佳实践是什么?(例如,User应该有Items,我应该存储在用户IdItem?我可以扩展User与类List<Item>导航属性?

我正在使用MVC模板中的"个人用户帐户".

试过这些:

'Membership.GetUser()'为空.

c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

154
推荐指数
4
解决办法
20万
查看次数

ASP .NET Identity中的声明是什么?

有人可以解释一下,声称机制在新的ASP.NET身份核心中意味着什么?

我所看到的,有一个AspNetUserLogins表,其中包含UserId,LoginProviderProviderKey.

但是,我仍然无法理解或找到有关何时将数据添加到AspNetUserClaims表中以及此表用于何种情况的任何信息?

asp.net asp.net-mvc asp.net-identity

152
推荐指数
4
解决办法
6万
查看次数

将ASP.NET MVC5身份验证添加到现有项目

我在网上看到过很多类似的页面,但大多数都使用新项目而不是现有项目,或者没有必要的功能.所以,我有一个现有的MVC 5项目,并希望将ASP.NET MVC5 Identity与登录,电子邮件确认和密码重置功能集成.

除此之外,我还需要在数据库上创建所有必要的表,即用户,角色,组等(我在我的项目中使用EF Code First).是否有符合这些需求的文章或样本?任何建议将不胜感激.提前致谢...

asp.net authentication asp.net-mvc owin asp.net-identity

151
推荐指数
2
解决办法
11万
查看次数

ASP.NET Identity的默认密码哈希 - 它是如何工作的并且是否安全?

我想知道在MVC 5和ASP.NET Identity Framework附带的UserManager中默认实现的Password Hasher是否足够安全?如果是这样,如果你可以向我解释它是如何工作的?

IPasswordHasher界面如下所示:

public interface IPasswordHasher
{
    string HashPassword(string password);
    PasswordVerificationResult VerifyHashedPassword(string hashedPassword, 
                                                       string providedPassword);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它不需要盐,但在这个帖子中提到:" Asp.net身份密码哈希 ",它确实在幕后加盐.所以我想知道它是如何做到的?这盐来自何处?

我担心的是盐是静态的,使它非常不安全.

c# asp.net security passwords asp.net-identity

148
推荐指数
5
解决办法
11万
查看次数