Oauth2
oauth2 core extension 曾经取代了 webservicescommons/oauthauthorizationserver 扩大。 它将 HTTP 端点公开为 Authorization 服务器。 它没有引入任何新的重要性能。
To enable the authorization server, add the oauth2 extension entry into the localextensions.xml file:
<extension name="oauth2" />
反对的配置:
- oauth2.refreshTokenValiditySeconds:Refresh token time-to-live,默认30天
- oauth2.accessTokenValiditySeconds: Access token time-to-live,默认12小时
Authorization Server
The authorization server exposes two endpoints:
- /oauth/authorize
- /oauth/token
在 Chrome 开发者工具 local storage 里把 auth token 删除之后,轻易在 UI 上再操作一下,会从新触发 token 申请:https://20.51.210.49:9002/aut...
下图是新的 token 申请的 form data 字段,输出字段:
下图是服务器返回的新的 Access Token 和 Refresh token:
OAuth2 里的几个角色
- 资源所有者:能够授予对受爱护资源的拜访权限的实体。 当资源所有者是集体时,则称为:最终用户。
- 资源服务器:托管受爱护资源的服务器,可能应用拜访令牌承受和响应受爱护资源申请。
- 客户端:代表资源所有者并经其受权收回受爱护资源申请的应用程序。术语客户端并不意味着任何特定的实现特色(例如,应用程序是否在服务器、桌面或任何其余特定设施上运行)。
- 受权服务器:服务器在胜利验证资源所有者并取得受权后向客户端颁发拜访令牌。
- 受权服务器在 Oauth2 中定义,示例资源服务器在 ycommercewebservices Extension 和 ywebservices Extension 中配置。
OAuth 2.0 带有四个流程。 SAP Commerce 反对所有这些:
- 因为 Resource Owner Password Flow 持有用户的 username 和 password,因而安全性较低,不适用于第三方应用程序。
如果 Web 应用程序能够保留 client_secret,则最好应用受权代码流 Authorization Code Flow。
隐式流 Implicit Flow 不须要任何受权令牌。 因而,它更容易但不太平安。 在浏览器中运行的 JavaScript 不太受信赖,并且不会收回刷新令牌。 这实用于须要长期拜访的客户端 Web 应用程序。
客户端凭据流 Client Credentials Flow 使客户端能够拜访其领有的资源。
依据您的客户端应用程序,您须要抉择适合的流程。您还须要禁用您不应用的其余流。
Resource Owner Password Flow
此流程有点相似于根本身份验证 basic authentication 流程,但它有一些益处。 它通常用于受信赖的挪动应用程序,例如挪动 Android 或 iOS 应用程序。 该流程包含将用户的 username 和 password 发送到令牌端点以换取 <access_token>。 服务器端应用刷新令牌回复是可选的。 挪动 client 否则必须保留用户名和明码以便长期拜访。
流须要 username 和 password 来取得 access_token。 然而,请记住,API 提供程序提供联合了 refresh_token 的拜访令牌。 因而客户端不须要保留用户名和明码,而只须要传递这些信息。 access_token 和 refresh_token 须要在本地长久化,这比存储用户凭证要好。 下图形容了此流程。
所出现流程的具体阐明:
步骤 (A):client 接管 username 和 password。在此步骤中,用户将此信息间接输出到客户端应用程序中。请留神,用户必须有方法将应用程序辨认为他们能够信赖的官网应用程序。
步骤 (B):接下来,客户端应用程序向受权服务器发出请求,例如 /oauth/token 端点。 client_id 和 client_secret 能够通过两种形式发送:在惯例的根本身份验证申请标头中,或作为在申请无效负载(即申请注释)中传递的参数的一部分。查看要传递的参数列表:
client_id 和 client_secret:作为参数或作为根本身份验证标头传递。根本身份验证意味着 client_id 和 client_secret 被视为用户名和明码,应用冒号 (:) 连贯,而后进行 Base64 编码。而后将此值用作受权申请标头的一部分,例如: Authorization: Basic Base64-encoded username:password
username 和 password:资源所有者的凭据,用户的实在凭据。
grant_type:此流程须要设置为 password。
步骤(C):认证服务器返回带有可选的refersh_token的access_token。
Refreshing an Expired Access Token
须要刷新下发的access_token。 如果不刷新这些令牌,client 必须记住用户凭据,这是一种不太平安的办法。 提供拜访令牌并刷新令牌意味着客户端只需记住令牌。
更多Jerry的原创文章,尽在:"汪子熙":