javascript – ZenDesk App OAuth基于浏览器的身份验证
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – ZenDesk App OAuth基于浏览器的身份验证,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4714字,纯文字阅读大概需要7分钟。
内容图文
![javascript – ZenDesk App OAuth基于浏览器的身份验证](/upload/InfoBanner/zyjiaocheng/756/0d7bd05903f24c67b2395306fc653d7f.jpg)
我正在开发一个ZenDesk应用程序,它可以从后端系统中获取客户信息.我们需要使用OAuth 2’s browser-based authentication flow对该系统进行身份验证.
包含指向身份验证页面的链接没有问题,例如:
https://oauth2server.com/auth?
response_type=token&
client_id=CLIENT_ID&
redirect_uri=REDIRECT_URI&
scope=photos
但是,一旦用户登录,OAuth服务器就想重定向客户端并包含授权令牌.所以REDIRECT_URI通常看起来像:
https://example.zendesk.com/agent/#token=ACCESS_TOKEN
但是,ZenDesk已经使用片段标识符来指示要在页面上显示的内容:
https://example.zendesk.com/agent/#/dashboard
https://example.zendesk.com/agent/#/tickets/1234
我的ZD应用程序只出现在某些页面上,所以我怎么能这两个
>让我的应用程序呈现和Javascript运行,和
>具有可用的身份验证令牌的片段标识符?
(我确实可以控制后端OAuth服务器,所以如果你想不出一个很好的干净方法来完成这个,那么OAuth服务器端的黑客建议也会被感激地接受.)
解决方法:
这是一个非常简单的ZenDesk App(框架版本0.5)
> authenticates against Google(在一个单独的弹出窗口中)
>从当前可见的票证中获取custom ticket field值
> retrieves the Google user’s name
在manifest.json,此ZenDesk应用程序应指定“位置”:“ticket_sidebar”.
app.js
(function (window) {
return {
zenDeskSubdomain: 'YOUR_ZENDESK_SUBDOMAIN',
googleClientId: 'YOUR_GOOGLE_CLIENT_ID',
events: {
'app.activated': 'onActivate',
'app.deactivated': 'onDeactivate',
'click .loginout': 'onLogInOutClick',
'click .show-username': 'onShowUserNameClick'
},
requests: {
getUserInfo: function (access_token) {
return {
url: 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=' + access_token,
type: 'GET',
proxy_v2: true
};
}
},
onActivate: function () {
console.info("onActivate()");
this.accessToken();
var user_id = this.ticket().customField("custom_field_22931898");
this.$('.userid').text(user_id);
},
onDeactivate: function () {
console.info("onDeactivate()");
if (this.timer) {
clearTimeout(this.timer);
}
},
onShowUserNameClick: function () {
var access_token = this.accessToken();
if (!access_token) {
console.info("Can't do it! No access_token!");
return;
}
this.ajax('getUserInfo', access_token)
.done(function (data) {
console.info(data);
this.$('.username').text(data.name);
});
},
onLogInOutClick: function (event) {
if (this.accessToken()) {
this.logout(event);
} else {
this.login(event);
}
},
login: function (event) {
console.info("login()");
event.preventDefault();
var popup = this.createLoginPopup();
this.awaitAccessToken(popup);
},
logout: function (event) {
console.info("logout()");
event.preventDefault();
this.accessToken(null);
console.info(" access_token = " + this.accessToken());
this.$('.loginout').text('login');
},
createLoginPopup: function () {
console.info("createLoginPopup()");
return window.open(
'https://accounts.google.com/o/oauth2/auth?response_type=token&client_id=' + this.googleClientId + '&redirect_uri=https%3A%2F%2F' + this.zenDeskSubdomain + '.zendesk.com%2Fagent%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile',
'Login Popup',
'width=400,height=400');
},
timer: null,
awaitAccessToken: function (popup) {
console.info("awaitAccessToken()");
if (this.isLoaded(popup)) {
console.info(" popup is loaded");
} else {
console.info(" popup is NOT loaded; sleeping");
var t = this;
this.timer = setTimeout(
function () { t.awaitAccessToken(popup); },
1000);
return;
}
var access_token = this.parseAccessToken(popup.location.href);
if (access_token) {
console.info(' access_token = ' + access_token);
popup.close();
this.accessToken(access_token);
} else {
services.notify('Error requesting code...');
}
},
isLoaded: function (win) {
try {
return ('about:blank' !== win.location.href)
&& (null !== win.document.body.innerHTML);
} catch (err) {
return false;
}
},
parseAccessToken: function (uri) {
var match = uri.match(/[#&]access_token=([^&]*)/i);
return match[1] || null;
},
accessToken: function (value) {
if (1 === arguments.length) {
console.info("Storing access_token = " + value);
this.store({ access_token: value });
}
var token = this.store('access_token');
console.info("access_token = " + value);
var loginout = this.$('.loginout');
if (token) {
loginout.text('logout');
} else {
loginout.text('login');
}
return token;
}
};
}(this));
layout.hdbs
<header>
<span class="logo"/>
<h3>{{setting "name"}}</h3>
</header>
<section data-main/>
<footer>
<div><a class="loginout">login</a></div>
<div><a class="show-username">show username</a></div>
<div><b>user id: </b><span class="userid">unknown</span></div>
<div><b>username: </b><span class="username">unknown</span></div>
</footer>
Google OAuth配置
配置Google OAuth以允许来自您的应用程序的流量.
重定向URI
> http://localhost:XXX – 用于ZAT开发/测试环境
> https://YOUR_ZENDESK_SUBDOMAIN.zendesk.com/agent/ – 用于生产
Javascript起源
> http://localhost:XXX – 用于ZAT开发/测试环境
> https://YOUR_ZENDESK_SUBDOMAIN.zendesk.com – 用于生产
内容总结
以上是互联网集市为您收集整理的javascript – ZenDesk App OAuth基于浏览器的身份验证全部内容,希望文章能够帮你解决javascript – ZenDesk App OAuth基于浏览器的身份验证所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。