oauth2

IdentityServer4实现原理

别等时光非礼了梦想. 提交于 2019-11-28 14:13:23
OAuth&OpenIDConnect是什么? 最近因为工作的原因,大概有两个月时间没写博客了,本来今年给自己的目标是每个月写一篇,或许记录工作中踩过的一些坑,或许学习一些新的技术框架。说实话IDS4的源码我是在几天前才开始看的,因为工作需要实现一个认证授权服务中心,临时抱佛脚研究了几天源码和查了一些资料,我个人的习惯是三方的开源框架,如果不了解源码实现,一般情况下不敢贸然使用。以下内容如果有说的不对的地方,希望大家及时指出。接下来我就结合OAuth&OIDC以及IDS4的源码跟大家剖析一下Identityserver4(以下简称IDS4)的实现原理。 在介绍IDS4之前,我们先来看下OAuth和OpenIDConnect(以下简称OIDC)协议的一些概念,因为只有在理解这两个协议规范的基础之上才能理解IDS4。 OAuth是什么? 最直接的方式,我们可以通过查看OAuth2的官方文档,地址是 https://oauth.net/2/ 。官方文档是英文版的,建议大家在阅读IDS4的源码之前多少看看这个文档,我个人的理解是OAuth是一个开放式授权委托协议,是一种规范,它可以让资源所有者委托应用软件(注意是委托),从IDP(IDP是一种服务提供商,NETCORE平台下的实现是IDS4)获取授权AccessToken访问资源所有者受保护的资源。接下来我们一起看看OAuth的授权流程。

保护微服务(Spring Cloud Security和OAuth2.0)

笑着哭i 提交于 2019-11-28 11:05:19
源码: Securing your Microservices 一、使用Spring和OAuth2来保护单个端点 1.建立验证服务 构建依赖项: 2.使用OAuth2.0服务注册客户端应用程序 小笔记:验证与授权,验证是看他是谁,授权是可以让他干些什么,所以授权之前肯定是要先验证的。 3.配置用户 上面两个返回的bean,就是在这里注入的: 4.验证用户 先把配置服务搞一下。 新建User表。 启动顺序:Eureka->配置服务->验证服务(端口号设一下:8901) 需要注意的几点: 返回的结果是: { "access_token" : "96040f35-8b10-491d-a82b-1c1a835ba632" , "token_type" : "bearer" , "refresh_token" : "f933f8b1-cace-4a1a-bc75-ff7b58b37d3d" , "expires_in" : 43199 , "scope" : "webclient" } 然后拿着token去验证这个用户: 返回的结果: { "user" : { "password" : null , "username" : "john.carnell" , "authorities" : [ { "authority" : "ROLE_USER" } ] ,

Springboot2+SpringSecurity+Oauth2+Mysql数据库实现持久化客户端数据

孤街醉人 提交于 2019-11-28 07:37:26
目录 介绍 建表,初始化数据 工程配置 Authorization Server - Spring Security配置 Authorization Server - 授权服务器 Resource Server - 资源服务器 测试 工程下载 (一) 简介 OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本。OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(authorization layer)。“客户端”不能直接登录“服务提供商”,只能登录授权层,以此将用户与客户端分离。“客户端”登录需要OAuth提供的令牌,否则将提示认证失败而导致客户端无法访问服务。OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。 OAuth2为我们提供了四种授权方式: 1、授权码模式(authorization code) 2、简化模式(implicit) 3、密码模式(resource owner password credentials) 4、客户端模式(client credentials) 授权码模式 授权码相对其他三种来说是功能比较完整、流程最安全严谨的授权方式,通过客户端的后台服务器与服务提供商的认证服务器交互来完成。流程如下图所示: 简化模式 这种模式不通过服务器端程序来完成

OAuth2, Swift 3, Instagram

旧城冷巷雨未停 提交于 2019-11-28 07:04:54
There seem to be lots of changes at IG. Many OAuth2 repos, all seem to have bugs, or really not easily converted to Swift3. Wondering if anyone has a solution for moving to Swift3 and working with the latest changes at Instagram? Solutions most welcome. OAuth2 implementation seems to one of the more complicated things out there. Surprised that IG has not offered their own example docs on how to do this with iOS. They only have docs for web based solutions. Maybe something brewing there? Zillions of coders they have on staff. But for now, on the hunt for a (dare I say?) simple solution. thanks

整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程(2

▼魔方 西西 提交于 2019-11-28 06:51:58
上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的登录认证): 上面的图很清楚的描述了当前登录login的流程,现在我们针对于login做成相关的微服务,解析如下: 请求方式:POST 服务URL: http://localhost:8080/user/login 参数类型:application/json Headers: Content-Type: application/json Authorization: Basic QXkjkdkYkhfeyKOKKHUM67ejfjeSfnrRdk5nPT0= Body:{ "userName":"admin", ---也可以是手机号码等 "password": "e10adc3949ba59abbe56e057f20f883e" } 返回值类型: application/json 返回的结果集: { "code": "200", "message": "Success", "version": "v1.0", "data": { "userInfo": { "userId": "00001", "pwd": "e10adc3949ba59abbe56e057f20f883e",

Overwriting Google Drive API v3 Argparse in Python

主宰稳场 提交于 2019-11-28 05:18:57
问题 I'm trying to use the Google Drive API (v3) with Python to obtain and upload files to my Google Drive account. I used this guide to setup my authentication: https://developers.google.com/drive/v3/web/quickstart/python But for my program, I would like to take commandline input for username, filename, and output_filename. I modified the google doc code and did the following: from __future__ import print_function import httplib2 import os from sys import argv from apiclient import discovery from

信息安全-OAuth2.0:NuGetFromMicrosoft

自作多情 提交于 2019-11-28 04:10:54
ylbtech-信息安全-OAuth2.0:NuGetFromMicrosoft 1. 返回顶部 1、 https://login.microsoftonline.com/common/oauth2/v2.0/authorize ?client_id=d5782a76-adae-43da-ad8a-62ed9a9dd6a1 &redirect_uri=https%3a%2f%2fwww.nuget.org%2fusers%2faccount%2fauthenticate%2freturn &response_mode=form_post &response_type=code+id_token &scope=openid+profile+email &state=OpenIdConnect.AuthenticationProperties %3du9cIgJcfIM6Stygb3mh_jfYBadi7h00PufR5cn4oGli-vRulP8Rym88ytmhKUdkmdlTOMEPBAiMckJMCM3dvpW5nOqxJsWVHE_3mXlFkKldr_DB4F52oUUZCiCh2NQbDGLL_kjI4b5NJFx7NPWEa_vUCpunlU6D8FmGcnuNLdeSwyvno06ja4yxylfGIMk6FbT4wjfT33n8p3z9vm

多账户的统一登录方案

二次信任 提交于 2019-11-27 21:09:05
名称解释 这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,必须现在常用的APP(网易云音乐)登录方式包含:网易、微信、QQ 内容 通过这一篇文章 可以学到:多用户下面的技术方案细节,以及相应的表设计,流程设计。 不可以:与其他文章一样,我这里不会有具体代码实现细节,方案做的对,代码咋写都不会太烂。 架构演进 创业初期 归结为创业初期是因为这个时候用户量比较少,甚至还没有接入上面所说的其他第三方的账户系统,只是自建的体系就可以满足,自建体系的话,目前常用的有 用户名密码注册登陆 这种方式在很多初期网站建设会使用,先注册,再进行登录,在老一点的cms中都能找到这个影子。 流程图: 流程说明: 前端将用户名、密码发送到服务器,服务器进行常规的判断,判断用户名、密码长度是否满足,用户名是否重复等条件,条件不通过直接返回对应错误码给到前端,这里密码字段,为了防止传输过程中被截胡,建议加密再上传,我们的传输密码默认都是会进行一个md5加密,然后记录到数据库再进行一层加密,就算是脱库也没事,密码不要明文存储。 校验通过后,就将用户名密码写入数据库,并进行后面积分发放等操作,这里不展开。 现在进行登录,前端将用户名,密码发送给到服务端,服务端首先会校验登录次数是否超过设置的阈值,如果超过只能继续等待被关小黑屋。

oauth2接入

天涯浪子 提交于 2019-11-27 12:44:10
1.oauth2 oauth2(开放授权) 是一个开放标准,在不需要用户将账号密码提供给第三方应用,来授权访问,比如微信的第三方登陆 oauth2 有四种模式: 授权码模式(authorization_code ), 密码模式(password), 用户名和密码访问 隐式授权模式(Implicit Grant), 客户端凭证模式(Client Credentials Grant) 服务器通信的场景 2.授权码模式: 授权码模式是功能最完整,流程最严密的授权模式。 1. 用户先访问客户端,客户端去认证服务器,认证服务器通过,返回一个授权码 并且重定向到指定的URL中, 例如: http://localhost:8080/oauth2/oauth/authorize?grant_type=authorization_code&client_id=console&client_secret=console&redirect_uri=http://127.0.0.1:8080/token/getToken&response_type=code 3. 客户端拿到授权授权码,以及之前的重定向URL,去认证服务器申请token。 授权服务器配置: package com.homeinns.config.autoconfigure; import com.homeinns.service

Oauth2.0(三):Access Token 与 Refresh Token

安稳与你 提交于 2019-11-27 00:46:29
  access token 是客户端访问资源服务器的令牌。拥有这个令牌代表着得到用户的授权。然而,这个授权应该是临时的,有一定有效期。这是因为,access token 在使用的过程中可能会泄露。给 access token 限定一个较短的有效期可以降低因 access token 泄露而带来的风险。   然而引入了有效期之后,客户端使用起来就不那么方便了。每当 access token 过期,客户端就必须重新向用户索要授权。这样用户可能每隔几天,甚至每天都需要进行授权操作。这是一件非常影响用户体验的事情。希望有一种方法,可以避免这种情况。   于是 Oauth2.0 引入了 refresh token 机制。refresh token 的作用是用来刷新 access token。鉴权服务器提供一个刷新接口,例如:   http://xxx.xxx.com/refresh?refreshtoken=&client_id=   传入 refresh token 和 client_id,鉴权服务器验证通过后,返回一个新的 access token。为了安全,Oauth2.0 引入了两个措施:   1,Oauth2.0 要求,refresh token 一定是保存在客户端的服务器上的,而绝不能存放在狭义的客户端(例如移动 app、PC端软件) 上。调用 refresh 接口的时候