Asp.net mvc 5 使用openid connect而不重定向到安全令牌服务

Asp.net mvc 5 使用openid connect而不重定向到安全令牌服务,asp.net-mvc-5,oauth-2.0,openid-connect,identityserver3,Asp.net Mvc 5,Oauth 2.0,Openid Connect,Identityserver3,我有几个ASP.NET MVC站点将用作共享安全令牌服务 这些网站需要自己的本地登录页面。今天,他们使用WS-Trust与Identity Server 2进行身份验证,但我们希望将其升级为在Identity Server 3上使用OpenID Connect 我们找不到OpenID connect支持这样的主动身份验证的任何情况,因此我们转而采用OAuth2资源所有者流 我第一次尝试解决这个问题如下: Startup.cs app.UseCookieAuthentication(new Coo

我有几个ASP.NET MVC站点将用作共享安全令牌服务

这些网站需要自己的本地登录页面。今天,他们使用WS-Trust与Identity Server 2进行身份验证,但我们希望将其升级为在Identity Server 3上使用OpenID Connect

我们找不到OpenID connect支持这样的主动身份验证的任何情况,因此我们转而采用OAuth2资源所有者流

我第一次尝试解决这个问题如下:

Startup.cs

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    TicketDataFormat = new AuthTicketDataFormat(),
    AuthenticationType = Auth.ssoAuthenticationType,
    LoginPath = new PathString("/account/login"),
    CookieName = ConfigurationManager.AppSettings["SsoCookieName"],
    CookiePath = "/",
    CookieDomain = ConfigurationManager.AppSettings["SsoCookieDomain"],
});
AccountController.Login(post)具有:

这是可行的,但是…我们认为应该有一个owin组件来简化流程。例如,我们可以看到以下扩展方法,但它们似乎都不能取代我们上面的方法:

app.UseIdentityServerBearerTokenAuthentication(
    new IdentityServer3.AccessTokenValidation.IdentityServerBearerTokenAuthenticationOptions {})

app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions{})

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions{})

app.UseOpenIdConnectAuthentication(
    new Microsoft.Owin.Security.OpenIdConnect.OpenIdConnectAuthenticationOptions{})
这些扩展方法,尽管我们尽了最大努力让它们在我们的情况下工作,但似乎从来没有取代我们对上面的工作代码的需求,我们在启动时手动接触令牌和userinfo端点以及cookie身份验证


我们是否遗漏了一些东西,或者我们的解决方案是针对这种情况的最佳解决方案……使用我们自己的登录页面进行主动身份验证,但使用最新的安全技术(OpenID connnect/OAuth2)?

如果您想在不重新定向的情况下登录,您必须使用资源所有者密码授权流。请参阅其中一位Identity Server作者编写的。它是针对ID服务器2的,但它应该仍然有用。还有一些来自的信息,这是如何进行的示例(在ID服务器对话中,他们称之为资源所有者密码凭据授予)

这就是说,这个流只是在框架中,因为它有点被OAuth 2.0规范的一些贡献者强行引入,实际上它有点违背OpenID/OAuth的思想。让你的网站重定向到login.yoursite.com可能看起来很麻烦,但实际上这是你应该做的。在用户体验方面,我在工作时与一位用户体验专家聊天(因为我很关心用户体验),他说这是一种现在已经足够普遍的体验(至少在企业中是如此),而且它不会从用户体验中减损,因为在重定向的掩护下,所有的魔法都发生在他们身上


我强烈建议使用带有重定向的隐式流。这很简单,说明了你应该如何做。

感谢你的及时回复和链接/建议。我们确实理解有关OAuth2资源所有者密码授予流的问题。在我们的例子中,这些是我们内部拥有并完全控制的可信web应用程序,因此它们与资源所有者流的参数很好地匹配。此外,所有站点的登录页面都有共享登录页面无法实现的内容要求。我们面临的问题是,我们是否应该使用这个流程。相反,我们希望找到一种更简单的方法,使用预构建的owin扩展来实现它。我也很好奇在不重定向的情况下获取令牌和用户信息,因为我同时控制客户端应用程序和身份验证服务器。几乎所有的示例都使用重定向,并将客户端应用程序作为身份验证服务器的第三方。在我的例子中,这个应用程序是一个SPA,我们使用这个流将用户/通过https发送到我们的身份验证服务器。你知道吗?我的处境也一样。如果没有,至少感谢上面的工作代码。
app.UseIdentityServerBearerTokenAuthentication(
    new IdentityServer3.AccessTokenValidation.IdentityServerBearerTokenAuthenticationOptions {})

app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions{})

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions{})

app.UseOpenIdConnectAuthentication(
    new Microsoft.Owin.Security.OpenIdConnect.OpenIdConnectAuthenticationOptions{})