小编Fit*_*itz的帖子

如何使 ASP.NET 使用 Owin OpenId Connect 库创建经过身份验证的会话?

在网上搜索了大量示例后,我正在努力解决似乎相当简单的要求。

我正在尝试扩展现有的使用表单身份验证的 ASP.NET 应用程序,以便它可以使用 OpenID Connect 进行身份验证以及来自身份提供者的一些角色信息。特别是我正在与我无法控制的现有托管身份提供者集成。

我将 ASP.NET MVC 与 OpenIdConnect 的 Owin 组件一起使用。即,

Microsoft.Owin.Security
Microsoft.Owin.Security.Cookies
Microsoft.Owin.Security.OpenIdConnect
Run Code Online (Sandbox Code Playgroud)

我能够成功地:

  1. 在 Web 浏览器中——导航到使用 [Authorize] 属性保护的控制器方法
  2. Owin 组件正确地将我重定向到身份提供者,在那里我可以进行身份​​验证,然后我被重定向回我的应用程序(注意:我的身份提供者要求传入一个 redirect_uri,所以我目前将其设置为OpenIdConnectAuthenticationOptions 启动配置。)
  3. 当重定向回我的应用程序时,我可以看到 access_token 和 id_token 作为查询字符串的一部分。此外,我已经能够使用 access_token 调用用户信息端点并使用该令牌正确获取有关用户的信息。

到现在为止还挺好!然而。

我未能掌握的内容以及我见过的大多数 Owin 示例似乎都没有解释:需要什么(如果有)额外配置才能让 ASP.NET 基于重定向在我的应用程序中实际创建经过身份验证的会话从身份提供者返回到我的应用程序。

我从文档中得到的一般感觉是,我不应该在 Owin 库中进行额外的配置——一旦我将系统配置为使用 cookie 身份验证和 OpenId Connect 库——它应该可以正常工作。然而,这似乎并不像看起来那么容易。我想我错过了一些东西。

一些具体的考虑/观察:

  1. 我发现的许多示例都不需要在 OpenIdConnectAuthenticationOptions 中设置 RedirectUri,但是我的身份提供者每次都需要设置此参数。
  2. 我发现的很少有例子解释了由于 RedirectUri 被击中而触发的控制器方法是否应该用 [Authorize] 保护或保持匿名。在我的测试中,如果我将其标记为 [Authorize],则会进入无限重定向循环。如果我保持匿名,我可以在请求信息中看到令牌,但永远不会创建 ASP.NET 会话。例如,Request.IsAuthenticated 始终为 false。
  3. 作为测试,我在几个 OpenIdConnectAuthenticationNotifications() 事件中设置了断点,目前我只看到我的代码闯入 RedirectToIdentityProvider 事件,而其他人似乎都没有命中——这让我相信我没有配置此权限。
  4. 根据我发现的建议,我已经在 web.config 中以这种方式设置了身份验证节点,但是如果我排除了这个节点,它似乎没有什么区别。

    <system.web>
        <authentication mode="None" />
    </system.web>
    
    Run Code Online (Sandbox Code Playgroud)

总结一下:

  1. 我是否需要专门编写代码来处理从身份提供程序返回的重定向,以便为给定用户手动设置 ASP.NET …

c# asp.net authentication owin openid-connect

5
推荐指数
1
解决办法
4127
查看次数

标签 统计

asp.net ×1

authentication ×1

c# ×1

openid-connect ×1

owin ×1