OAuth身份验证
OAuth身份验证
您可以使用OAuth2来验证所有到Zendesk Chat的API请求。亚博OAuth为您的应用程序提供了一种安全的方式来访问您的帐户数据,而不需要将用户名和密码等敏感信息随请求一起发送。
如果您在Zendesk支持中创建了Zen亚博desk聊天帐户,则必须使用OAuth访问令牌对API请求进行身份验证。
如果你有一个不是在Zendesk Support中创建的只能聊天的帐户,你可以使用OAuth身份验证,但这不是亚博必需的。看到安全与认证在介绍部分。
要使用OAuth身份验证,您需要通过添加API客户端向Zendesk Chat注册应用程序。亚博您还需要向应用程序添加一些功能来实现OAuth授权流。
主题:
添加API客户端
您必须在Zendesk Chat中添加API客户端来为您的应亚博用程序生成OAuth凭据。根据OAuth流程,客户端可能无法访问所有Zendesk Chat帐户。亚博
本节介绍如何在Zendesk Chat中使用仪表板添加API客户端。亚博您还可以使用API以编程方式添加和管理API客户机。看到OAuth客户.
添加客户端
以管理员身份登录Zendesk Chat。亚博
在“仪表板”中,转到设置>账户,然后选择API选项卡。
点击添加API客户端.
请填写以下字段:
- 客户端名称-你客户的名字。这是用户在被要求授予对应用程序的访问权限时将看到的名称
- 公司-这是用户在请求授予对应用程序的访问权限时将看到的公司名称。这些信息可以帮助他们了解他们授权访问的对象。
- 重定向url-输入Zendesk Chat在用户决定是否授权您的应用程亚博序访问Zendesk Chat后用于重定向用户的URL或URL。url必须是绝对的而不是相对的,
https
或本地主机
.
点击创建API客户端.
如果成功创建客户端,将出现一个对话框,其中列出客户端ID和客户端秘密。稍后您将需要两者来创建OAuth访问令牌。
将客户端秘密保存在安全的地方。
出于安全原因,整个字符串只显示一次。关闭对话框后,您将只能看到前几个字符。
在应用程序中使用客户端id(也称为唯一标识符)和客户端秘密,如下部分所述。
实现OAuth授权流
亚博Zendesk Chat支持多个OAuth流。第一个流程是授权代码授予流程,在用户授予应用程序对其帐户的访问权限后,会生成一个授权代码。然后,您的应用程序可以将授权代码交换为API请求中使用的访问令牌。
的隐式拨款流类似于授权代码授予流程,除了您的应用程序不需要获取和交换访问令牌的授权代码。如果用户授予访问权限,则立即返回令牌。
其他选项如下保密资助类型不需要与终端用户交互的:
- 密码授予类型
- 客户端凭证类型
刷新令牌仅为授权代码授予和密码授予流发出。
授权代码授予流程
此流称为授权代码授予流,因为在请求访问令牌之前必须获得授权代码。
要实现授权代码授予流,您需要向应用程序添加以下功能:
- 步骤1 -将用户发送到Zendesk聊天授权页面亚博
- 步骤2 -处理用户的授权决策
- 步骤3 -从Zendesk Chat获取访问令牌亚博
- 步骤4 -在API调用中使用访问令牌
步骤1 -将用户发送到Zendesk聊天授权页面亚博
首先,您的应用程序必须将用户发送到Zendesk聊天授权页面。亚博该页面要求用户授权您的应用程序访问Zendesk Chat,就像它是他们一样。亚博用户做出选择后,Zendesk Chat会将选择和其他一些信息亚博发送回你的应用程序。
将用户发送到Zendesk Chat授权页面亚博
在应用程序中添加一个链接或按钮,将用户发送到以下URL:
https://www.zopim.com/oauth2/授权/新
请求应该是GET,带有以下参数(确保对参数进行了url编码):
response_type
——需要。亚博Zendesk Chat在响应中返回一个授权代码,因此将code指定为响应类型。例子:response_type =代码
.redirect_uri
——需要。在用户决定是否授权您的应用亚博程序访问Zendesk Chat后,Zendesk Chat应用于重定向用户的URL。URL必须是绝对的而不是相对的。它还必须是安全的(https),除非你正在使用本地主机
.这个URI应该是您在客户端注册期间提供的URI之一client_id
——需要。在Zendesk Chat中注册应用程序时获得的唯一标识符。亚博请参阅上面的部分。范围
——需要。用空格分隔的作用域列表,用于控制对oauth端点的访问。支持以下范围:读
,写
,闲谈,聊天
.例子:=读% 20写范围
.- 的
读
scope允许访问用于显示和索引的api - 的
写
scope允许访问用于创建、更新和删除的api - 的
闲谈,聊天
范围提供对聊天对话API
- 的
状态
-在用户决定是否授予访问权限后,Zendesk Chat响应中包含的任意字符串。亚博可以通过该参数防止CSRF (cross-site request forgery)攻击。在CSRF攻击中,最终用户被欺骗点击一个在web应用程序中执行操作的链接,最终用户仍然经过身份验证。
为了防止这种攻击,可以向state参数添加一些值,并在它返回时对其进行验证。
子域名
—Z亚博endesk支持子域。如果您的用户从Zendesk Support子域(如.zendesk.com/cha亚博t)访问聊天,则需要。该值用于登录用户。
步骤2 -处理用户的授权决策
你的应用程序必须处理来自Zendesk Chat的响应,告诉它用户的决定。亚博该信息包含在注册应用程序时指定的重定向URL中的URL参数中。
如果用户决定授权应用程序,则URL包含一个授权代码。例子:
{redirect_url}?代码=7xqwtlf3rrdj8uyeb1yf
授权码的有效时间较短。
如果用户决定不授权应用程序,则URL包含错误
参数,该参数通知您用户拒绝访问应用程序。
{redirect_url}?错误=access_denied
使用这些值来控制应用程序的流程。如果URL包含代码参数,请从Zendesk Chat获取访问令牌,如下节所述。亚博这是在Zendesk Chat API调用中包含的令牌。亚博
步骤3 -从Zendesk Chat获取访问令牌亚博
如果您的应用程序接收到来自Zendesk Chat的授权代码以响应授予访问权限的用户,您的应用程序可以调用Zen亚博desk Chat来获得访问令牌。要获得访问令牌,向以下端点发出POST请求:
https://www.zopim.com/oauth2/令牌
在请求中包括以下必需的参数:
grant_type
——指定authorization_code
作为值。代码
-使用用户授予访问权限后从Zendesk Chat接收到的授权代码。亚博client_id
-使用您在Zendesk Chat注册应用程序时收到的唯一标识符。亚博client_secret
-使用您在Zendesk Chat注册应用程序时收到的秘密值。亚博redirect_uri
- Zendesk Chat发送访问令牌的资源URL。亚博它也应该是在客户端注册期间指定的uri之一。范围
——指定读
作为值。
请求必须结束https
参数必须是url编码的
使用旋度
旋度https://www.zopim.com/oauth2/token\
- h“内容类型:应用程序/ x-www-form-urlencoded”\
- d“grant_type = authorization_code&code = {your_code} client_id = {your_client_id}
client_secret = {your_client_secret} &redirect_uri = {your_redirect_uri}范围=读% 20写'\
- x的帖子
示例响应
Http /1.1 200 ok
内容类型:application / json
{
:“access_token gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo”,
:“refresh_token x4AoIVTmaoZmpl25ZX6vTPL2f0aZXHbn”,
“token_type”:“持票人”,
“范围”:“读”
}
步骤4 -在API调用中使用访问令牌
进行API调用需要访问令牌。在请求的授权头中设置令牌如下:
授权:承载{a_valid_access_token}
例如,一个curl请求显示您的帐户详细信息将如下所示:
旋度https://www.zopim.com/api/v2/account\
- h“授权:持有人gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo”
隐式拨款流
隐式授权流类似于授权代码授权流,只是没有步骤3。您请求一个令牌而不是授权代码。换句话说,你设置了response_type
参数改为“token”而不是“code”。如果最终用户授权访问,令牌将立即在重定向URL中发送。隐式授权流适用于没有服务器端组件的基于浏览器的JavaScript应用程序。由于所有应用程序的源代码都加载在浏览器中,所以客户端机密不能保密,也不会被使用。
示例请求
要将用户发送到Zendesk聊天授权页面,请执行亚博步骤1授权代码授予流程,用小零钱换到response_type
参数。亚博Zendesk Chat直接在响应中返回一个令牌,因此指定“token”作为响应类型
https://www.zopim.com/oauth2/授权/新?response_type=令牌&client_id={your_unique_identifier}&范围=读&redirect_uri=http%3.一个%2F%2Flocalhost%2Ftoken
示例响应
如果用户授予对应用程序的访问权限,则令牌将包含在重定向URL中。
{redirect_url}# access_token=gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo&token_type=持票人&范围=读
如果请求格式不正确、无效或用户决定不授予对应用程序的访问权限,则URL包含错误
而且error_description
参数。
{redirect_url}#错误=access_denied&error_description=的+结束-用户+或+授权+服务器+否认+的+请求
保密资助类型
聊天API支持以下机密授权类型:
- 密码授予类型
- 客户端凭证类型
您只能将这些授予类型与聊天OAuth客户端它的client_type属性设置为“confidential”。的“client_type”:“机密”
设置启用对机密授予类型的支持。该设置没有其他副作用。例如,您仍然可以将客户端与其他授权流一起使用。
方法只能将client_type设置为“confidential”更新客户端这个API中的端点。没有更改设置的UI选项。如果通过用户界面重新保存OAuth客户端,该设置将恢复为“public”。
如果您的web应用程序是高度安全的,并且可以安全地获得所需的凭据,而不会在客户端暴露它们或以任何其他方式损害它们,则只使用机密授予类型。机密授权类型不应用于移动应用程序或客户端浏览器应用程序。
访问令牌的HTTP请求不需要授权标头。身份验证和授权凭据在请求正文中传递——用户名和密码用于授予密码,或者client_id和client_secret用于授予客户端凭据。
看到OAuth 2.0授权框架RFC 6749有关机密和公共OAuth客户机概念的详细信息。
密码授予类型
使用密码授予类型交换Zendesk聊天用户名和密码为访问令牌。亚博
此授权类型仅支持聊天帐户。聊天+支持账户不支持。看到关于聊天账号类型在聊天帮助中心。
使用旋度
旋度https://www.zopim.com/oauth2/token\
- h“内容类型:应用程序/ x-www-form-urlencoded”\
- d“grant_type =密码和用户名= {zendesk_c亚博hat_username}密码= {zendesk_chat_password} client_id = {your_client_id} client_secret = {your_client_secret} '\
- x的帖子
示例响应
Http /1.1 200 ok
内容类型:application / json
{
:“access_token gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo”,
:“refresh_token x4AoIVTmaoZmpl25ZX6vTPL2f0aZXHbn”,
“token_type”:“持票人”,
“范围”:“读”
}
客户端凭据授予类型
仅建议应用程序访问自己的资源时使用此授权类型。亚博电脑端您可以使用它来将OAuth客户机的id和秘密交换为访问令牌。
使用此授权类型的访问令牌执行的操作由创建OAuth客户机的管理员执行并记录。
使用旋度
旋度https://www.zopim.com/oauth2/token\
- h“内容类型:应用程序/ x-www-form-urlencoded”\
- d“grant_type = client_credentials&client_id = {your_client_id} client_secret = {your_client_secret} '\
- x的帖子
示例响应
Http /1.1 200 ok
内容类型:application / json
{
:“access_token gErypPlm4dOVgGRvA1ZzMH5MQ3nLo8bo”,
“token_type”:“持票人”,
“范围”:“读”
}