我使用asp.net 5和Identity 3来验证用户,但它总是重定向到默认的登录URL,即"帐户/登录".我想改变它,但似乎没有任何地方可以设置这个选项.我在Configure()方法中使用AddIdentity().请帮忙.谢谢
对,所以..我想我很困惑!
我有几个使用ASP.NET Identity 2.1运行的ASP.NET MVC 5站点,一切都很棒.我正在创建一个新的MVC 6站点,我希望用户使用他们用于其他系统的现有凭据.我已经尝试过以下内容:
我只是想知道我的选择是什么,因为文档在新版本上不是很好,我得知数据库中有DDL更改但我希望有一种方法可以让我的MVC 5网站继续进行与.NET身份3数据库向后兼容2.1.
我的另一个选择是升级MVC 5应用程序以使用Identity 3,而我认为这意味着将它们更新为MVC 6,这是我真正没有资源的东西,或者拥有一个全新的身份数据库(似乎最简单的选择).
任何意见都会有所帮助,毫无疑问我错过了一些细节,如果有人对此设置有任何进一步的问题,请填写空白.
sql-server asp.net-mvc asp.net-identity-2 asp.net-core-mvc asp.net-identity-3
我正在使用.NET Core,Identity Core和MVC Core创建用户注册系统.我能够在数据库中创建用户并创建角色.
这是视图中的表单,可让我选择一个用户并选择要添加的角色:
@using (Html.BeginForm("AddRoleToUser", "Roles"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<p>
Username : @Html.DropDownList("UserName", (IEnumerable<SelectListItem>)ViewBag.Users, "Select ...")
Role Name: @Html.DropDownList("RoleName", (IEnumerable<SelectListItem>)ViewBag.Roles, "Select ...")
</p>
<input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)
这些下拉列表中填充了数据库中已存在的用户和角色.它们允许我选择User
s,以及我已经创建的角色的名称.例如,我有一个名为"admin"的角色,这个表单让我选择字符串"admin".
这是处理向用户添加角色的操作:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> AddRoleToUser(string UserName, string RoleName)
{
try
{
ApplicationUser user = _db.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
await _userManager.AddToRoleAsync(user, RoleName);
PrepopulateDropDownMenus();
ViewBag.ResultMessage = "Role created successfully!";
return View("Manage", "Roles");
}
catch (Exception ex)
{
Console.WriteLine(ex);
return View("Manage");
}
}
Run Code Online (Sandbox Code Playgroud)
该操作永远不会将该角色添加到用户,并且该异常显示"Role"ADMIN"不存在".没有内在的例外.我已经尝试将RoleName
动作参数转换为全部大写,但它仍然没有找到角色.我也尝试使用角色ID而不是名称,这也是不成功的. …
我正在尝试使用以下方法自定义asp.net标识实体:
public class User : IdentityUser<string, UserClaim, UserRole, UserLogin>
public class UserClaim : IdentityUserClaim<string>
public class UserLogin : IdentityUserLogin<string>
public class UserRole : IdentityUserRole<string>
public class UserToken : IdentityUserToken<string>
public class Role : IdentityRole<string, UserRole, RoleClaim>
public class RoleClaim : IdentityRoleClaim<string>
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个DbContext类,如下所示
public class AppDbContext : IdentityDbContext<User, Role, string, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>
Run Code Online (Sandbox Code Playgroud)
然后配置这些
services
.AddIdentity<User, Role>()
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders();
Run Code Online (Sandbox Code Playgroud)
但我也尝试过
.AddEntityFrameworkStores<AppDbContext, string>()
Run Code Online (Sandbox Code Playgroud)
我在互联网上阅读了很多博客文章,例如这样,但大多数博客都要针对密钥的数据类型进行更改,比如int
或者Guid
.在我的情况下,我没有更改默认键数据类型string
.
我在所有这些情况下编译都没问题,但它在运行时抛出错误
System.TypeLoadException GenericArguments [0],'MyIdentity.Entities.User','Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`8 [TUser,TRole,TContext,TKey,TUserClaim,TUserRole,TUserLogin,TUserToken]'违反约束类型参数'TUser'.
at System.RuntimeTypeHandle.Instantiate(RuntimeTypeHandle句柄,IntPtr*pInst,int numGenericArgs,ObjectHandleOnStack类型),位于System.RuntimeType.MakeGenericType(Type …
ASP.NET Web Api Core
未授权请求的默认行为是发送401/403 error
空内容。我想通过指定某种指定错误的 Json 响应来更改它。
但是我很难找到一个合适的地方来引入这些变化。官方文档没有帮助(阅读全部内容)。我猜测可能是我可以UnathorizedException
在我的异常过滤器/中间件中捕获,但它没有解决(我猜它在授权级别得到处理,甚至根本没有抛出)。
所以我的问题是如何在未经授权的请求的情况下自定义响应行为。
asp.net-web-api asp.net-identity asp.net-identity-3 asp.net-core
我使用ASP.NET Identity 2.2.0与ASP.NET MVC 5.2.3和Entity Framework 6.1.2.
我使用带有Code First的ASP.NET Identity将一个新属性及其相应的表添加到我的数据库中,如下所示:
public class ApplicationUser
{
[ForeignKey("UserTypeId")]
public UserType Type { get; set;}
public int UserTypeId { get; set;}
}
public class UserType
{
[Key]
public int Id { get; set;}
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,从某些动作开始,当我打电话时:
var user = UserManager.FindByNameAsync(userName);
Run Code Online (Sandbox Code Playgroud)
它确实为用户提供了正确的,UserTypeId
因为它是一个原始的,但它没有获得该类的UserType
属性ApplicationUser
.
如果我没有使用这个抽象,我会调用LoadProperty<T>
或者Include
实体框架中的方法在类上包含名为Type
(类型UserType
)的导航属性或关系ApplicationUser
.
我如何使用ASP.NET Identity进行此操作UserManager
?我怀疑唯一的方法是在我的自定义UserManager
派生类中重写此方法并自己完成吗?
我使用asp.net身份.我创建了实现用户身份的默认asp.net mvc应用程序.该应用程序使用HttpContext.User.Identity来检索用户ID和用户名:
string ID = HttpContext.User.Identity.GetUserId();
string Name = HttpContext.User.Identity.Name;
Run Code Online (Sandbox Code Playgroud)
我可以自定义AspNetUsers表.我在这个表中添加了一些属性,但希望能够从HttpContext.User中检索这些属性.那可能吗 ?如果有可能,我该怎么办?
我在web api中使用asp.net身份进行基于令牌的身份验证.
对于刷新令牌,我已经基于以下链接实现了
我添加了以下两个类,并在启动配置中提到.
从ui我通过api单独使用用户名和密码调用
当我调用上面的api时,请求直接转到ValidateClientAuthentication方法.
但在这种方法逻辑中,我们需要发送客户端ID和客户端密钥.
在用户登录特定用户之前,我们如何知道这两个?
我认为工作流程应该是这样的,我们需要检查数据库的用户名和密码,并应生成访问令牌和刷新令牌.
但是我在哪里做这个逻辑.
样本中提到的这个系统的工作流程是什么?
在此系统之前,我将在我的应用程序中调用Common/login api,并在成功验证后,
我将调用代码使用户登录
var userIdentity=await user.GenerateUserIdentityAsync(UserManager);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, userIdentity);
Run Code Online (Sandbox Code Playgroud)
在上面的代码之后,我将从用户身份生成访问令牌.
我已经多次尝试过以下实现并厌倦了流程.
帮助我关于这里提到的逻辑和流程.
SimpleAuthorizationServerProvider
namespace AngularJSAuthentication.API.Providers
{
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
string clientId = string.Empty;
string clientSecret = string.Empty;
Client client = null;
if (!context.TryGetBasicCredentials(out clientId, out clientSecret))
{
context.TryGetFormCredentials(out clientId, out clientSecret);
}
if (context.ClientId == null)
{
//Remove the comments from …
Run Code Online (Sandbox Code Playgroud) asp.net-web-api asp.net-web-api2 asp.net-identity-2 asp.net-identity-3
我正在尝试设置一个validateInterval
使用的ASP.NET 5 RC1应用程序ASP.NET Identity 3
我正在尝试在这个答案中实现代码.
有很多代码示例像这样的答案,但似乎它在ASP.NET 5 RC1中无效
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(15)
},
ExpireTimeSpan = TimeSpan.FromMinutes(30)
});
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用上面的代码示例,ASP.NET 5 RC1
我就不能这样做了
Provider
不是CookieAuthenticationOptions
Visual Studio 的属性,Visual Studio无法CookieAuthenticationProvider
通过其灯泡选项找到任何命名空间.
如何设置validateInterval
的ASP.NET 5 RC1
?
asp.net-identity asp.net-core-mvc asp.net-identity-3 asp.net-core