我正在使用ASP.Net Identity 2,但很快就希望在它变得更稳定时更改为Identity 3(任何人都知道这可能是什么时候?).这是我的代码示例:
content.ModifiedBy = User.Identity.GetUserId();
Run Code Online (Sandbox Code Playgroud)
Content表将ModifedBy存储为UNIQUEIDENTIFIER,Content对象将Guid的数据类型分配给ModifiedBy
当我查看GetUserId()的签名时,它返回一个字符串.
那么如何将用户UserId带入ModifiedBy,这是一个Guid?
asp.net asp.net-identity asp.net-identity-2 asp.net-identity-3
在asp.net身份2中用于更改身份表名称的方法在asp.net身份3中不起作用.
从使用个人用户帐户的ASP.NET 5 Web应用程序模板开始,我已设法使用Microsoft帐户进行外部身份验证.当用户点击登录,他们将被重定向到ExternalLogin
在AccountController
这样的
<form asp-controller="Account" asp-action="ExternalLogin" method="post" asp-route-returnurl="@ViewData["ReturnUrl"]" class="nav navbar-right">
<button type="submit" class="btn btn-null nav navbar-nav navbar-right" name="provider" value="Microsoft" title="Log in"><span class="fa fa-sign-in"/> Log In</button>
</form>
Run Code Online (Sandbox Code Playgroud)
这让他们使用他们的Microsoft帐户登录,所有似乎都运行良好.但是,如何拦截直接尝试访问特权操作[Authorize]
以便将用户重定向到ExternalLogin
?可以设置默认操作Startup.cs
吗?
编辑1尝试遵循我CustomAutorizationFilter
在Filters文件夹中创建的@Yves的建议.它不会检查任何条件
public class CustomAutorizationFilter : IAuthorizationFilter
{
public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
//if (...) // Check you conditions here
//{
context.Result = new RedirectToActionResult("ExternalLogin", "Account", null);
//}
}
}
Run Code Online (Sandbox Code Playgroud)
并编辑ConfigureServices
如下
services.AddMvc(config =>
{
config.Filters.Add(typeof(Filters.CustomAutorizationFilter));
});
Run Code Online (Sandbox Code Playgroud)
当我在本地运行应用程序时,它不再进入主页.它返回一个空白http://localhost:52711/Account/ExternalLogin
显然有很多我不明白. …
entity-framework-core asp.net-core-mvc asp.net-identity-3 asp.net-core
我正在使用Identity 3.0创建Web应用程序,并且遇到SignInManager PasswordSignInAsync()方法的问题.我在文档中使用它,但它没有返回任何内容(应用程序代码只是停在那里)这是我的控制器代码:
public class AppController : Controller
{
private IAccountService _service;
private readonly SignInManager<User> _signInManager;
private UserManager<User> _userManager;
public AppController(IAccountService service, SignInManager<User> signInManager, UserManager<User> userManager)
{
_service = service;
_signInManager = signInManager;
_userManager = userManager;
}
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByEmailAsync(model.Email);
var password = await _userManager.CheckPasswordAsync(user, model.Password);
var result = await _signInManager.PasswordSignInAsync(
model.Email,
model.Password,
model.RememberMe,
lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToAction(nameof(EmployeeController.Contact), "Employee");
}
if (result.IsLockedOut)
{ …
Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc asp.net-identity asp.net-identity-3 asp.net-core
我们正在使用 ASP.NET Identity 3。
我们的用户会随机自动注销。为了重现这个问题,我尝试重新启动应用程序,所有用户都退出,甚至那些已经检查过的用户也都退出了Remember me
。
它只发生在生产中,在开发环境中运行良好。
更新:
我们只有一台生产服务器。
我已经配置了IdentityServer
几个客户端,其中一些是使用Hybrid flow
(桌面,iOS,并不重要)的本机应用程序.
我想强制注销超过X分钟不活动的用户,如果可能的话,再次重定向到登录页面.
我可以设法通过使用短暂刷新令牌以实现这一目标RefreshTokenExpiration = true
,并且SlidingRefreshTokenLifetime = *DesiredTimeoutTime*
,和每次调用API之前,客户端首先刷新用户的访问令牌.实际上,这会将会话管理空闲超时重载到刷新令牌的到期时间.
但这不是它的设计使用方式.刷新令牌应该是长寿的.
此外,对于API的每次调用,客户端都会刷新它的访问令牌,因为我使用持久存储来获取我的授权(特别是使用内置EF支持的SQL Server),这意味着我的方式比我更多曾经想过我的ID DB.
我指定我使用的是本机应用程序,因为我知道它(可能)可以使用cookie实现基于浏览器的应用程序,但同样,那些与本机应用程序不能很好地工作(对于我知道的所有内容,请放心如果我错了就纠正我.如果有可能以某种方式实现饼干 - 我很乐意听到.
总的来说,我真的缺乏对Identity.Application cookie
vs 的关系的了解Access Token
.这有点令人困惑.
无论如何,我正在寻找更优雅的解决方案,如果有的话.
谢谢.
session asp.net-identity-3 asp.net-core identityserver4 asp.net-core-identity
我了解 .NET Identity,但是有很多关于 Identity 2 和 Identity 3 的文章。后者(Identity 3)似乎只适用于 .NET Core 解决方案。所以正在考虑使用 Identity 2。但我不清楚:
asp.net asp.net-membership asp.net-identity-2 asp.net-identity-3 asp.net-core
我将用户选择的文化存储到用户声明中,并且我有一个自定义 RequestCultureProvider 读取此值并相应地设置请求文化。
该应用程序将有一个个人资料页面,用户可以在其中更改他的偏好(包括文化)。将数据保存到数据库后,我需要默默地重新登录用户以更新他的声明。
附加信息:
那么,如何使用 Idsrv4 实现静默重新签名?
authentication asp.net-identity-3 identityserver4 asp.net-core-2.0
我有一个解决方案,包括:
oidc-client
。当我创建新用户时,我设置了一些保存在AspNetUserClaims
表中的自定义声明,如下所示:
然后,在我的 API 项目中,在控制器内我想要获取经过身份验证的用户的用户声明。
我本来希望this.User.Claims
得到这些,但结果却返回了以下内容,这似乎是与客户端应用程序相关的声明,而不是与用户相关的声明。
如何address, location, tenant_role
从 Web API 项目内的控制器访问这些自定义用户声明 ( )?
请记住,API 项目无权访问该类UserManager
或任何ASP.NET Identity Core
相关内容。
c# asp.net claims-based-identity asp.net-identity-3 identityserver4
我们可以在 NuGet 库中找到两个独立的包:
两者似乎都定期更新并有数百万次下载。
我知道它System.IdentityModel.Tokens.Jwt
依赖于Microsoft.IdentityModel.Tokens
,但我不知道应该在我的 ASP.NET Core 2.0 应用程序中使用哪个。
我现在正在使用Microsoft.IdentityModel.Tokens
,它足以创建 JWT 令牌并验证它们。
我需要添加System.IdentityModel.Tokens.Jwt
到我的项目中并更改任何代码吗?
PS:我在这个项目中没有使用 Azure 服务。