gpt4 book ai didi

authentication - 如何使用 NancyFx 和 IdentityServer3(非 API 网站)设置基于 cookie 的身份验证

转载 作者:行者123 更新时间:2023-12-04 19:53:19 24 4
gpt4 key购买 nike

我们的环境如下:

  • 独立的 IdentityServer3 实例(发布引用 token ,而不是 jwt)
  • ASP.NET WebAPI 资源服务器
  • 针对 IdSvr 进行身份验证的 .NET 客户端应用程序(通过资源所有者流程)

  • ...现在我们想开始添加一个 OWIN 托管的 Web 应用程序,它将使用 NancyFx 来提供服务器渲染的页面以及几个 AngularJS SPA。此 Nancy 网站不会托管任何 API,但可能会使用我们现有 API 中的数据。我想在 OWIN 管道中添加身份验证,以帮助保护我们的 Angular 应用程序不被发送给没有访问权限的用户。

    这与发送 SPA 代码并让 Angular 确定用户是否应该看到任何内容形成对比。在这种情况下,我们已经公开了 javascript 代码库,这是我们想要避免的。

    我试图了解我应该如何配置这个 Nancy 站点以使用隐式流对 IdentityServer 的用户进行身份验证。我之前已经在独立的 SPA 中实现了这个身份验证方案(其中所有身份验证都由 AngularJS 代码处理, token 存储在 HTML5 本地存储中),但我对如何在 OWIN 管道中正确解决这个问题有点迷茫。

    我认为 OWIN cookie 身份验证中间件是答案,但这是否意味着以下内容?
  • 我需要将用户重定向到 IdentityServer(使用适当的 url 参数进行隐式流)?
  • IdentityServer 将在成功登录后将用户重定向回我的站点,那么我在那里 Hook OWIN 授权管理器以设置适当的 cookie?

  • ……还是我想的全错了?

    作为引用,我已经通读了以下帖子,它们非常有帮助,但我不太了解 OWIN 的整体情况。接下来我将尝试使用 UseOpenIdConnectAuthentication 中间件,但我很感激 SO 可能在这里提供的任何指导。

    http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net-developer/

    https://github.com/IdentityServer/IdentityServer3/issues/487

    最佳答案

    从根本上说,在通过 OWIN 托管的 Nancy 应用程序中实现 OpenID Connect 身份验证与在任何 MVC/Katana 应用程序中实现它确实没有什么不同(Thinktecture 团队有一个针对此场景的示例:https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Clients/MVC%20OWIN%20Client)

    您基本上需要三样东西:cookie 中间件、OpenID Connect 中间件和 Nancy 中间件:

    public class Startup {
    public void Configuration(IAppBuilder app) {
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions {
    AuthenticationMode = AuthenticationMode.Active,
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType
    });

    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions {
    AuthenticationMode = AuthenticationMode.Active,

    // Set the address of your OpenID Connect server:
    Authority = "http://localhost:54541/"

    // Set your client identifier here:
    ClientId = "myClient",

    // Set the redirect_uri and post_logout_redirect_uri
    // corresponding to your application:
    RedirectUri = "http://localhost:56765/oidc",
    PostLogoutRedirectUri = "http://localhost:56765/"
    });

    app.UseNancy(options => options.PerformPassThrough = context => context.Response.StatusCode == HttpStatusCode.NotFound);
    }
    }

    如果您正在寻找功能演示,可以查看 https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Nancy/Nancy.Client (注意:它没有将 IdentityServer3 用于 OIDC 服务器部分,但它对客户端应用程序没有任何影响)。

    关于authentication - 如何使用 NancyFx 和 IdentityServer3(非 API 网站)设置基于 cookie 的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33173806/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com