6

我想弄清楚一旦用户使用Dotnet Core MVC App上的OpenID Connect进行身份验证后,运行一些代码的最佳方式。我不想在登录后对重定向网址进行硬编码,因为他们仍然需要结束他们尝试访问后的身份验证。我只需要运行代码例如。 “检查它是否第一次登录并设置标志”或类似的东西。在Asp.net Core的openid连接登录后运行代码

我使用的是中间件,但是因为每次请求都会调用它,导致一些问题。

有没有人有关于如何实现这一目标的任何想法?

+0

你是怎么回事?我有完全相同的要求,但一直没有能够拿出一个合适的解决方案离子呢。我发布了类似的[问题](https://stackoverflow.com/questions/45618386/how-to-redirect-after-azure-ad-authentication-to-different-controller-action-in) – OjM

+0

你是如何解决问题?我有完全相同的问题。 – TejSoft

+0

你应该有一个方法来生成你的API令牌......只要在认证过程完成后在那里调用一个方法,并在用户表中有一个标志,比如AccountNeverLoggedIn ... –

回答

0

我相信这种类型的选择性重新路由应该在继承自AuthorizeAttribute的类中执行;可以在那里采取许多序言操作,包括应用其他角色上下文。

一个示例是阅读并接受条款和条件,必须对登录凭证执行一次(读取用户)。这可以通过重定向到角色受保护的MVC控制器来执行。一旦被接受,角色“TandC_Consent”(或任何其他角色)可以被应用于用户,并且用户可以被重定向到控制器,该控制器在每次之后都使用[AuthorizePermission("TandC_Consent")]进行验证。

This github example显示如何实现AuthorizeAttribute实例和[AuthorizePermission()]修饰符。

0

我也在搜索如何做到这一点,最后我使用了IdentityServer3。 IUserService接口定义了一些可以重载的方法。其中一个方法是PostAuthenticateAsync从IdentityServer3文档:在用户已成功验证

这种方法被称为但在此之前他们返回到客户端应用程序。它允许一个 综合位置检查所有其他身份验证方法之后的自定义用户工作流程。它专为UI工作流程而设计。通过 PostAuthenticationContext具有以下属性:SignInMessage:传递给授权端点的 上下文信息。 AuthenticateResult:当前的AuthenticateResult。用户服务 可以重新分配给一个非空值来更改认证结果 。

context参数有AuthenticateResult属性,该属性可以设置为自定义的验证结果:

public override Task PostAuthenticateAsync(PostAuthenticationContext context) 
{ 
    // code that will determine target url 
    // redirectPath = ... 
    context.AuthenticateResult = AuthenticateResult(redirectPath, claims); 
} 

redirectPath必须以/或〜/”

这里是IUSerService实施的example