小编Ric*_*ore的帖子

为外部身份验证创建部分登录Cookie

最近我使用Identity Server 3为我的Web API实现了2FA.如果登录是在本地进行的(使用IUserService),一切都按预期工作.现在,我希望能够通过发出部分登录cookie来进行此登录.这意味着我有一个API方法(POST),可以让用户在不进入主页面的情况下进行部分登录.要发出身份验证cookie,这就是我所做的(基于IS3扩展方法):

_owinContext.Environment.IssueLoginCookie(new AuthenticatedLogin
{
      IdentityProvider = Constants.ExternalAuthenticationType,
      Subject = userId,
      Name = identityId,
      Claims = new[] { new Claim(ClaimTypes.NameIdentifier, identityId) },
      AuthenticationMethod = Constants.AuthenticationMethods.TwoFactorAuthentication
});
Run Code Online (Sandbox Code Playgroud)

在此之后,我将用户重定向回登录页面,并完全登录到绕过2FA步骤的应用程序.我正在跳跃,这将使用户部分登录,但它完全登录用户.

注意:我实现Two Factor的方式基于IUserService中的AuthenticateLocalAsync方法.在这里,我更新AuthenticateResult以使用带有重定向路径的构造函数.API方法不会调用IUserService.它简单地发布了登录cookie.

编辑: 因此在检查IdentityServer3内部实现后,我现在能够让用户通过2FA屏幕.现在的问题是当部分登录成功时(验证码匹配)我将用户重定向到恢复URL并导致500错误页面(没有例外抛出或显示日志).如果在正常页面登录时发生这种情况,一切正常.

处理用户发布登录请求:

var messageId = clientIdentifier;

var claims = new List<Claim>();
(...)

var authenticationContext = new ExternalAuthenticationContext
{
    ExternalIdentity = new ExternalIdentity() { Provider = "API", Claims = claims },
};

await _userService.AuthenticateExternalAsync(authenticationContext);
var authResult = authenticationContext.AuthenticateResult;

var ctx = new PostAuthenticationContext
{ …
Run Code Online (Sandbox Code Playgroud)

c# two-factor-authentication asp.net-web-api identityserver3

23
推荐指数
1
解决办法
557
查看次数

ASP.NET Core MVC使用现有数据库进行身份验证

我即将使用ASP.NET Core框架实现Web应用程序(现有应用程序的后台办公室).目前我正在考虑如何验证用户身份.主数据库使用MySQL(此框架不支持),因此我将通过现有的PHP SOAP API访问数据库.

有没有办法实现基于令牌的(OAuth)身份验证,知道数据访问将通过SOAP API完成?

mysql asp.net-core

8
推荐指数
1
解决办法
2097
查看次数

识别两个功能

我想创建一些在Visual Studio(C++)中使用的东西,也许是一个扩展,它将与内部的两个已知函数一起使用.让我试着解释一下.假设我有两个函数start()stop().我经常使用这些函数:

start();
 do something...
stop();
Run Code Online (Sandbox Code Playgroud)

有时候,知道什么是开始以及停止什么可能会让人感到困惑:

start();
 do something...
 start();
 do something...
 start();
 do something...
 stop();
 stop();
stop();
Run Code Online (Sandbox Code Playgroud)

让我了解什么是开始和什么停止我需要手动识别所有行.我想创建类似的东西:

start(){
 do something....
 start(){
 do something ...
 }
}
Run Code Online (Sandbox Code Playgroud)

每次我关闭开始括号时,stop函数都将关闭,代码将更加井井有条.

你们对如何完成这个或类似的东西有任何想法吗?

c++ visual-studio

7
推荐指数
1
解决办法
104
查看次数