使用OAuth 2在web应用程序和本机桌面应用程序之间进行单点登录
我们希望编写一个web应用程序(具有ASP.NET核心),通过自定义URL协议启动旧版Windows桌面应用程序。web应用程序必须使用授权服务器通过OAuth 2获取访问(承载)令牌,通过该令牌,它可以通过ASP.NET核心web API访问用户的资源。桌面应用程序也必须能够通过Web API访问用户的资源。桌面应用程序如何获取访问令牌 我可以想到以下几种选择:使用OAuth 2在web应用程序和本机桌面应用程序之间进行单点登录,oauth,asp.net-core,oauth-2.0,openid-connect,identityserver4,Oauth,Asp.net Core,Oauth 2.0,Openid Connect,Identityserver4,我们希望编写一个web应用程序(具有ASP.NET核心),通过自定义URL协议启动旧版Windows桌面应用程序。web应用程序必须使用授权服务器通过OAuth 2获取访问(承载)令牌,通过该令牌,它可以通过ASP.NET核心web API访问用户的资源。桌面应用程序也必须能够通过Web API访问用户的资源。桌面应用程序如何获取访问令牌 我可以想到以下几种选择: 桌面应用程序显示一个登录屏幕,将输入的用户名和密码发送到授权服务器(使用OAuth 2的“资源所有者密码凭据”授权类型),并获取一个
此场景中是否有IdentityServer的示例?两个应用程序都应使用系统浏览器共享登录会话。这样,用户就可以在本机应用程序中获得SSO(甚至反之亦然) 该规范描述了本机应用程序的最佳实践:
两个应用程序应使用系统浏览器共享登录会话。这样,用户就可以在本机应用程序中获得SSO(甚至反之亦然) 该规范描述了本机应用程序的最佳实践:
为什么您的两个应用不能都是auth server客户端,那么在登录一个用户后就不必登录另一个用户,或者我在这里遗漏了什么。也不要认为传递代币是最好的方法,这有点欺骗了IdSrv的目的。每个客户端都应该进行自身身份验证,并拥有自己的访问权限。您可以定义自定义重定向uri方案,该方案是桌面应用程序的入口点。一旦用户登录,重定向uri方案将打开您的桌面应用程序并传递身份验证代码。使用OAuth,授权代码将通过重定向URL传递给客户端。此重定向URL可以是具有用于启动桌面应用程序的自定义协议的URL。重定向URL可能如下所示:MyCustomProtocol:CustomString?code=AuthorizationION_CODE桌面应用程序接收URI作为参数,它可以从中提取授权代码。但是,我认为授权代码是为请求它的客户机准备的,不应该传递给其他客户机。你不同意吗?为什么你的两个应用不能都是auth server的客户端,那么在登录一个用户后就不必登录另一个用户,或者我在这里遗漏了什么。也不要认为传递代币是最好的方法,这有点欺骗了IdSrv的目的。每个客户端都应该进行自身身份验证,并拥有自己的访问权限。您可以定义自定义重定向uri方案,该方案是桌面应用程序的入口点。一旦用户登录,重定向uri方案将打开您的桌面应用程序并传递身份验证代码。使用OAuth,授权代码将通过重定向URL传递给客户端。此重定向URL可以是具有用于启动桌面应用程序的自定义协议的URL。重定向URL可能如下所示:MyCustomProtocol:CustomString?code=AuthorizationION_CODE桌面应用程序接收URI作为参数,它可以从中提取授权代码。但是,我认为授权代码是为请求它的客户机准备的,不应该传递给其他客户机。您不同意吗?web应用程序必须将运行它的浏览器的名称(例如“chrome.exe”或“firefox.exe”)传递给本机桌面应用程序(通过自定义URL)。桌面应用程序必须使用授权请求的URL启动此浏览器。桌面应用程序可以在授权请求中指定环回重定向URI,并且必须侦听环回接口以获取身份验证代码。通过使用OAuth代码交换扩展的验证密钥,桌面应用程序可以证明授权和令牌请求均由同一应用程序发出。web应用程序必须将其运行的浏览器名称(例如“chrome.exe”或“firefox.exe”)传递给本机桌面应用程序(通过自定义URL). 桌面应用程序必须使用授权请求的URL启动此浏览器。桌面应用程序可以在授权请求中指定环回重定向URI,并且必须侦听环回接口