我正在创建一个与Shopify的API集成的应用程序,该API使用OAuth2进行身份验证和授权。通过使用Spring安全OAuth2教程和Shopify教程,我已经能够与单个商店进行集成。YAML配置如下所示:
shopify:
shop: myshop
scopes: read_customers,read_orders
security:
oauth2:
client:
clientId: myclientid
clientSecret: mysecret
tokenName: access_token
authenticationScheme: query
clientAuthenticationScheme: form
accessTokenUri: https://${shopify.shop}.myshopify.com/admin/oauth/access_token
userAuthorizationUri: https://${shopify.shop}.myshopify.com/admin/oauth/authorize?scope=${shopify.scopes}&grant_options[]=
pre-established-redirect-uri: https://myapp/login
registered-redirect-uri: https://myapp/login
use-current-uri: false
resource:
userInfoUri: https://${shopify.shop}.myshopify.com/admin/shop.json但是,这种静态配置不能用于在Shopify的app中发布的应用程序,因为重定向、访问令牌、用户信息和用户授权URI取决于商店名称。有使用多个提供程序的示例。,但它们仍然必须是静态的。
为了允许这些URI是动态的,我提出了一些可能的选项:
/login路径中使用一个参数来标识商店,然后创建一个过滤器,该过滤器将商店名添加到运行在其他所有内容之前的ThreadLocal中,然后通过Spring代理工厂bean动态创建OAuth2过滤器所需的AuthorizationCodeResourceDetails。OAuth2ClientAuthenticationProcessingFilter及其所需的所有资源。OAuth2ClientAuthenticationProcessingFilter,以便它能够处理重新创建获取访问令牌所需的RestTemplate。所有这些选择似乎都相当困难。在Security OAuth2中处理动态生成的URI以访问令牌和用户信息的好方法是什么?
此外,由于我一般都是OAuth2新手,是否需要在Spring配置中启用资源服务器来使用访问令牌来保护我的应用程序?
发布于 2017-11-21 23:20:09
我也遇到了同样的问题,我倾向于您使用ThreadLocal存储的第一个理论。下面是我可能要解决的方法:
通过重写ServletRequest中的OAuth2ClientAuthenticationProcessingFilter方法,在LocalThread存储中设置来自OAuth2ClientAuthenticationProcessingFilter的值:
然后,通过重写下面的OAuth2RestTemplate方法来转换URI中的URI:
我可能不得不为RestTemplate制作我自己的@Bean,它有一个可以查找动态Shopify域的注入@服务。
如果我的解决方案有效的话,我会发出去的。
https://stackoverflow.com/questions/43827696
复制相似问题