文章目录

  • 简介
  • OpenId Implicit Flow
  • 创建onelogin的配置
  • 页面的运行和请求流程
  • 关键代码
  • 总结

简介

onelogin支持多种OpenId Connect的连接模式,上一篇文章我们讲到了使用openId的Authentication Flow,今天我们将会讲解一下如何使用Implicit Flow。

OpenId Implicit Flow

Implicit Flow也叫做隐式授权

上图就是一个隐式授权的例子,和Authorization Code模式不同的是,认证服务器返回的是一个access token片段,只有这个片段,我们是无法得到access token的。

这里我们需要额外请求一次client resource服务器,服务器将会返回一个script脚本,通过这个脚本,我们对access token片段进行解析,得到最终的access token。

在隐式授权模式,一般用在app或者websites没有后台逻辑的情况。也就是说所有的授权都是在前端完成的。

尤其对于那种单页面应用来说,隐式授权模式特别有用。

我们再看一下在onelogin中的隐式授权流程:

  1. 用户尝试建立和你的client app的连接,这个请求将会重定向到onelogin,并且带上配置的唯一client_id。

  2. onelogin将会对用户信息进行认证和授权。

  3. 授权过后的用户信息将会以id_token (JWT)的形式,传递给onelogin中配置的回调地址。

  4. client app使用onelogin的public key对id_token进行校验,如果一切ok,那么将会建立好连接。

我们考虑下隐式授权模式的安全性。

在隐式授权模式下,client app需要从onelogin获取到公钥,然后使用这个公钥去解析onelogin返回的id_token。

虽然恶意用户可能获取到client_id和onelogin的公钥,但是返回的id_token只会发给配置好的callback地址,所以仍然是安全的。

创建onelogin的配置

虽然我们在前面的文章中在onelogin中创建了一个app,因为callback的不同,我们这里新创建一个app。

填上我们的callback地址: http://localhost:3000

其他的和之前的配置保持一致。

我们看下最新的SSO配置:

这里我们需要保存最新的client_ID,因为不是Authentication Flow模式,我们不需要用到client_secret。

注意这里的两个Issuer URLs,这里存储的是onelogin的配置信息。

页面的运行和请求流程

我们从onelogin的官网例子中下载隐式授权的单页面应用。

https://github.com/onelogin/onelogin-oidc-node/tree/master/2.%20Implicit%20Flow

在javascript/main.js中修改OIDC的配置:

const ONELOGIN_CLIENT_ID = '90a0e970-f2b6-0138-6171-0a5535c40b31178911';
const ONELOGIN_SUBDOMAIN = 'flydean-dev';

然后运行npm install;npm start来启动这个单页面的应用程序。

点击login按钮,将会跳转到onelogin的登录界面:

输入用户名密码,我们会跳回localhost页面。

这里我们会调用 https://flydean-dev.onelogin.com/oidc/2/certs 去拿到onelogin的公钥。

通过个这个公钥和返回的id_token,就可以拿到用户的信息。

关键代码

因为是单页面应用,所有的请求其实都是通过JS来执行的。我们看下系统的关键代码。

为了使用openid协议,这里的例子使用了oidc-client.min.js,通过这个客户端来进行openid协议的连接工作。

下面是页面的openid connect配置信息:

var settings = {    authority: 'https://' + ONELOGIN_SUBDOMAIN + '.onelogin.com/oidc/2',client_id: ONELOGIN_CLIENT_ID,redirect_uri: window.location.origin,response_type: 'id_token token',scope: 'openid profile',filterProtocolClaims: true,loadUserInfo: true
};

有了这些配置信息,我们就可以创建oidc的manager:

var mgr = new Oidc.UserManager(settings);

关键代码很简单,点击login的时候,需要进行页面跳转到onelogin进行授权登录:

function redirectToLogin(e) {e.preventDefault();mgr.signinRedirect({state:'some data'}).then(function() {console.log("signinRedirect done");}).catch(function(err) {console.log(err);});
}

授权完成之后,跳转回本机页面之后,需要校验回调信息,并从该信息中解析出用户的信息,并展示在页面上:

function processLoginResponse() {mgr.signinRedirectCallback().then(function(user) {console.log("signed in", user);document.getElementById("loginResult").innerHTML = '<h3>Success</h3><pre><code>' + JSON.stringify(user, null, 2) + '</code></pre>'}).catch(function(err) {console.log(err);});
}

所有的逻辑都封装在oidc-client.min.js,对程序员非常友好。

总结

以上就是在onelogin中使用OpenId Connect Implicit Flow的基本思路和流程。希望大家能够喜欢。

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/openid-implicit-onelogin/

本文来源:flydean的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

在onelogin中使用OpenId Connect Implicit Flow相关推荐

  1. 在onelogin中使用OpenId Connect Authentication Flow

    文章目录 简介 OpenId Connect和Authentication Flow简介 onelogin的配置工作 使用应用程序连接onelogin 程序中的关键步骤 总结 简介 onelogin是 ...

  2. IdentityServer4 实现 OpenID Connect 和 OAuth 2.0

    关于 OAuth 2.0 的相关内容,点击查看:ASP.NET WebApi OWIN 实现 OAuth 2.0 OpenID 是一个去中心化的网上身份认证系统.对于支持 OpenID 的网站,用户不 ...

  3. 移动端获得微信openid_构建用于移动设备的OpenID Connect流

    移动端获得微信openid Finding precise guidelines on how to implement OpenID Connect for native mobile apps i ...

  4. IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  5. 微服务openid等_使用OpenID Connect在Quarkus中保护微服务

    微服务openid等 This is the fourth part in a series on building a microservice from the ground up with Qu ...

  6. 【One by One系列】IdentityServer4(一)OAuth2.0与OpenID Connect 1.0

    在微服务场景中,身份认证通常是集中处理,这也是有别于单体应用一把梭哈的模式,其中,在微软微服务白皮书中,提供了两种身份认证模式: 网关,没错,原话是If you're using an API Gat ...

  7. OpenID Connect:OAuth 2.0协议之上的简单身份层

    OpenID Connect是什么?OpenID Connect(目前版本是1.0)是OAuth 2.0协议(可参考本人此篇:OAuth 2.0 / RCF6749 协议解读)之上的简单身份层,用 A ...

  8. jws webservice 跳过https认证_基于OAuth2的OIDC (OpenId Connect)身份认证

    OIDC协议 OIDC(OpenID Connect)是在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议. OAuth2协议 OAuth2是一个授权协议,它无法提供完善的 ...

  9. ASP.NET Core 认证与授权[3]:OAuth OpenID Connect认证

    在上一章中,我们了解到,Cookie认证是一种本地认证方式,通常认证与授权都在同一个服务中,也可以使用Cookie共享的方式分开部署,但局限性较大,而如今随着微服务的流行,更加偏向于将以前的单体应用拆 ...

最新文章

  1. VC串口通信编程-2
  2. ACMNO.42 C语言-第几天 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。利用结构体的在最下面
  3. 世界首部AI创作漫画正式发表:StyleGAN神还原《铁臂阿童木》画风,继承手冢治虫衣钵...
  4. 《快学Scala》第二章 控制结构和函数
  5. Spring Boot 整合 Netty(附源码)
  6. java操作日期的相关工具类,拿去即用
  7. fopen php 乱码,如何解决php fgets读取文件乱码的问题
  8. pandownload用户未登录_Pandownload再度复活,下载速度飙升到10MB/s以上
  9. 数据3分钟丨Gartner宣布明年12大战略性技术趋势;PolarDB-X正式开源;OceanBase 3.2发布...
  10. 二、套接字类型与协议设置
  11. 程序员必读的入门到大牛高效书单
  12. [IOS APP]南渡记-东藏记-西征记-野葫芦引有声小说
  13. 如何迅速提升网站流量
  14. 自编真假探测游戏来了 好玩
  15. 如何让你的“笨兔”更像苹果?
  16. 联想微型计算机怎么进入bios,联想怎么进入bios图文教程
  17. JavaMail实现注册邮箱验证案例
  18. 百度 android 市场占有率,百度数据:11Q1中国Android手机市场研究
  19. 在Linux下掌握arm和操作系统(0)--开篇闲聊
  20. 【DL】第 4 章:目标检测和图像分割

热门文章

  1. 机器学习-预测之时间序列分析预测法原理及实战
  2. HDU4367(线段相交与斐波那契数列)
  3. cocos2d-x游戏实例(21)-纵版射击游戏(8)
  4. TCP 和 UDP 绑定同一端口通信的解释
  5. c++ template(10)类型函数
  6. Redis 缓存常见问题:缓存一致性的解决方案
  7. 阿里《Java开发手册》中的 1 个bug!
  8. DevOps和SRE有什么不同,每个意味着什么
  9. Java集合框架:总结
  10. 若只让我推荐一名LiveVideoStackCon上海的讲师,就是他