使用OAuth 2

时间:2017-07-25 15:04:17

标签: oauth asp.net-core oauth-2.0 openid-connect identityserver4

我们想要编写一个Web应用程序(使用ASP.NET Core),通过自定义URL协议启动旧版Windows桌面应用程序。 Web应用程序必须使用授权服务器通过OAuth 2获取访问(承载)令牌,通过它可以通过ASP.NET Core Web API访问用户的资源。桌面应用程序也必须能够通过Web API访问用户的资源。桌面应用程序如何获取访问令牌?

我可以考虑以下选项:

  1. 桌面应用程序显示登录屏幕,将输入的用户名和密码发送到授权服务器(使用“资源所有者密码凭据”授权类型OAuth 2)并获取访问令牌。
  2. 桌面应用程序显示嵌入式浏览器窗口。嵌入式浏览器请求授权服务器的OAuth授权端点(使用OAuth 2的“授权代码”授权类型),并且用户必须登录才能进行授权。授权服务器重定向回重定向URL。桌面应用程序拦截此重定向,提取授权令牌并使用它来获取访问令牌。
  3. Web应用程序启动桌面应用程序并将其访问(承载)令牌作为参数传递给桌面应用程序。
  4. 在启动桌面应用程序之前,Web应用程序从授权服务器请求新的授权代码。 Web应用程序启动桌面应用程序,并将授权代码作为参数传递给桌面应用程序。桌面应用程序通过将授权代码发送到授权服务器的OAuth令牌端点来交换访问令牌的授权代码。
  5. 我们不希望使用第一个和第二个选项,因为我们想要单点登录。

    第三种选择似乎并不是一个好主意,因为用户台式PC上的恶意软件也可以获取和使用访问令牌。

    第四个选项似乎是剩下的唯一选择。据我所知,授权码是临时(短期)一次性令牌。除此之外,您还需要知道获取访问令牌的客户端密钥。 任何人都可以确认选项四是要走的路吗?或者我忽略了什么?

    此方案中是否有IdentityServer的示例?

1 个答案:

答案 0 :(得分:0)

两个应用程序都应使用系统浏览器共享登录会话。这样,用户就可以在本机应用程序中获得SSO(反之亦然)。

规范描述了原生应用的最佳做法: https://tools.ietf.org/html/draft-ietf-oauth-native-apps-12