# 从全栈开发到云原生:一个Java工程师的面试实战记录 ## 面试背景 在一次互联网大厂的Java全栈开发岗位面试中,一位拥有5年经验的程序员——李明(28岁)接受了面试官的多轮技术提问。...面试官:** 你在之前的项目中用过Spring Boot,能说说它的优势吗?...生产者将消息发送到交换机,交换机根据路由规则将消息转发到队列,消费者从队列中消费消息。 **面试官:** 如果消息丢失怎么办?...比如在后台管理系统中,我们可以根据用户角色限制访问权限。 **面试官:** 有没有用过OAuth2? **李明:** 有,我们用OAuth2实现了第三方登录,比如微信、QQ等。...通过授权码模式获取access_token,再获取用户信息。 **面试官:** OAuth2的流程是怎样的?
## 第一轮:Java基础与JVM ### 问题1:你能解释一下Java的垃圾回收机制吗? 应聘者:嗯,Java的垃圾回收机制主要是通过JVM自动管理内存,避免了手动释放内存带来的错误。...面试官:非常好,CI/CD是现代开发的重要一环。那你能不能写一个简单的GitLab CI配置文件? 应聘者:当然可以。...例如,在订单创建后,发送一条消息到Kafka,由另一个服务消费并更新库存。 面试官:Kafka确实非常适合高吞吐量的场景。那你能说说Kafka的生产者和消费者是怎么工作的吗?...应聘者:是的,我们使用OAuth2来实现第三方登录,比如微信、QQ等。通过授权码模式获取access_token,然后换取用户信息。 面试官:OAuth2是一个标准的授权协议,非常适合开放平台。...那你能写一个简单的OAuth2授权码获取的代码吗? 应聘者:好的。
前言 DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。...认证授权 我们要使用 Gitlab Api 首先要拿到 Gitlab 的认证,才可以获得 Gitlab Api 的操作权限 GitLab Api 授权有如下几种方式: OAuth2 tokens Personal...,稍微注意一下,Gitlab Api 获取 access_token 的 url 前缀是不带 '/api/v4',而其他的请求是需要带上 '/api/v4', 所以我们多封装了一个 methodV 方法来请求其他的...OAuth2 access_token,然后通过 access_token 调用对应的 open api 即可拿到我们想要的信息。...封装 Gitlab Api 请求 首先展示一下项目封装 api 的目录结构 ? 这里之所以会根据 gitlab api 的分类做成工具类是因为在后面的操作过程中,我们会频繁的调用它。
**应聘者**:是的,我们在项目中使用了Spring Security来实现基于角色的访问控制(RBAC)。 **面试官**:那你是如何处理OAuth2的?...**应聘者**:我们使用OAuth2来实现第三方登录,比如微信授权登录。前端会跳转到微信的授权页面,获取code后,再通过后端接口换取access_token。...API,GET方法用于获取所有用户,POST方法用于创建新用户。...: localhost port: 8500 // 在Spring Cloud中,服务注册与发现通常通过Consul或Eureka来实现,上面的配置是使用Consul的示例。...ResponseEntity.ok(generateJwtToken(user)); } // 这是一个简化的OAuth2登录流程,前端通过微信授权获取code,后端通过code换取access_token
OAuth是一个关于授权的开放网络标准,在全世界得到的广泛的应用,目前是2.0的版本。OAuth2在“客户端”与“服务提供商”之间,设置了一个授权层(authorization layer)。...图18 我们在HengYuUserDetailsService类中做了从数据库读取用户的操作,如果没有查询到用户直接抛出异常提示,如果查询到并且设置对应的角色后返回SpringSecurity内置的User...图24 图24中我们的OAuth2的客户端配置并没有从数据库中读取而是使用了内存中获取,因为本章的内容比较多,所以在后期文章中我们会再次讲到如何从数据库中获取clients进行验证。...我们在创建客户端信息时使用到了application.properties配置文件的自定义配置,具体配置内容如下图25所示: ?...图29 可以看到正如我们预期一样,返回了401错误以及我们自定义的错误码”Access Denied“,下面我们来获取access_token。
问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样。...问题2:网页授权access_token与基础支持的access_token不同,那微信分享中的access_token,是不是基础支持的access_token 答:是 网页授权access_token...答:没有限制 问题4:通过网页授权获取用户基本信息,使用jssdk中的access_token竟然也能获取到用户数据,这是什么情况 答:查资料网页授权access_token与分享的jssdk中的access_token...不是不一样吗。...$openid = $oauth2['openid']; 2,通过用户发送消息,通过fromuser 获取openid 参考官方回答: 网页授权接口调用凭证,注意:此access_token与基础支持的
说人话:OAuth2是一种协议,用来定义如果有人想接入你写的服务,如何获取用户的授权并访问用户在你服务器上的资源,OAuth2就规定了整个流程该如何交互。...答案是client GitLab登录页面 点击GitHub,会跳转的GitHub的登录页面,那么你身为一个resource owner,决定要不要让Gitlab获取你在GitHub上的部分资源。...这样就完成了Gitlab使用了你的Github信息进行了登录。在这个例子中,我们列举一下各个角色。...,还记得刚才的GitHub和GitLab案例吗?...继续看rfc6749文档,查看如何获取token 根据上述参数,postman调用如下,可以看到获取到了access_token。
在 Library 中搜索这个 API, 并且将其 ENABLE。 ? 在 ENABLE 这个 API 之后,就可以点击 "CREATE CREDENTIALS" 创建口令了。...你可以按照以下命令来获取 refresh token,你需要使用 curl 以及 jq 这两个工具。和上面一样,记得替换下面命令中相对应的变量。因为需要访问谷歌,你需要确保你的终端可以访问谷歌。...确保你创建正确的文件夹和文件名,否则 CircleCI 会一直没办法工作并且不好排查到原因。我就是因为文件夹名字弄错了,看了好久。。。一般的配置文件的环境配置如下所示。...注意我们使用的是 CircleCI 2.0版本。你还可以选择 docker 中操作系统的版本。你也可以通过 environment 来设置环境变量。...我们不希望在脚本里面直接配这些信息。那么我们就需要在环境变量中配置这些变量的信息了。可以在 CircleCI 里面来进行环境变脸的配置,找到对应的 project 来进行环境变量的配置。 ?
一、简介 1、企微数据安全更新 从2022年6月20号20点开始,除通讯录同步以外的基础应用(如客户联系、微信客服、会话存档、日程等),以及新创建的自建应用与代开发应用,调用该接口时,不再返回以下字段:...头像、性别、手机、邮箱、企业邮箱、员工个人二维码、地址,应用需要通过oauth2手工授权的方式获取管理员与员工本人授权的字段。...企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的UserId身份信息。...snsapi_base:静默授权,可获取成员的基础信息(UserId与DeviceId); snsapi_privateinfo:手动授权,可获取成员的详细信息,包含头像、二维码等敏感信息。...在企业微信管理端查看 agentid 是 授权方的网页应用ID,在具体的网页应用中查看 redirect_uri 是 重定向地址,需要进行UrlEncode state 否 用于保持请求和回调的状态,授权请求后原样带回给企业
(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID...2、用户访问第三方页面时,先去请求一个api,获取code和state code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期...分为两种:一种是静默方式(snsapi_base);一种是非静默方式(snsapi_userinfo),需要用户去手动点击同意才能获取用户的信息。...静默方式直接就获取到了openid ? 3、在1中配置的回调方法中根据获取到的code和state再去请求如下接口,获取access_token 和openid。...获取code后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/access_token?
# 从Java全栈到云原生:一个程序员的进阶之路 在互联网大厂的面试中,一位名叫李明的28岁程序员正在接受一场技术深度考察。...**面试官**:那你有没有使用过OAuth2? **李明**:是的,我们在一些第三方登录功能中使用了OAuth2,比如微信登录。 **面试官**:那你能说说OAuth2的工作流程吗?...**李明**:OAuth2的核心是授权码模式。用户通过第三方平台登录,获取授权码,然后通过授权码换取访问令牌,最后用令牌访问资源。 **面试官**:那你能举一个具体的例子吗?...**李明**:比如在我们的用户系统中,我们允许用户通过微信登录。用户点击微信登录按钮后,跳转到微信授权页面,授权后获取code,再通过code换取access_token,最后获取用户信息。...{ // 调用微信接口获取access_token return "access_token"; } } ``` ## 第八轮提问:总结与反馈 **面试官**
code=CODE&state=STATE,客户端在收到这个请求后,获得code和state的参数值,并再次发起请求,获取access_token 1.3 获取access_token 其服务端点为 https...在获取用户信息时,包括 需要在请求地址中拼接access_token,openid这两个参数,并指定为GET请求 同上,需要兼容text/plain的MediaType 二、开发实战 下面我们逐步介绍如何优雅地实现这些定制需求...,最终用于发起授权请求的地址authorizationRequestUri就是从OAuth2AuthorizationRequest对象中获取的,其默认实现类是DefaultOAuth2AuthorizationRequestResolver...文件中将本地IP"127.0.0.1"映射为一个虚拟的域名,例如www.oauth2.com,然后在微信公众平台测试账号内设置授权回调页面域名地址,找到“网页账号”这一项,点击修改,在弹窗中输入“www.oauth2...然后通过日志可以看到,接着又发起了获取access_token的请求,如果成功获取到access_token,随即就会使用acces_token再请求获取用户信息的接口,最后在得到用户数据后会创建对应的
Flask不像Django一样有各种现成的组件可以选用,Flask的各种扩展也不那么「开箱即用」。...如果大家对OAuth不太了解的,OAuth分为OAuth1协议与OAuth2协议,是一种开放的用户认证协议,它允许任何已注册的外部调用方(Client),获取平台(Provider)内部的授权访问的资源...然后,在配置文件中加入两个配置: Python GOOGLE_CLIENT_ID = os.getenv('GOOGLE_CLIENT_ID') GOOGLE_CLIENT_SECRET = os.getenv...('GOOGLE_CLIENT_SECRET') 因为这两个配置是敏感信息,推荐从环境变量读取,不要暴露在代码库中。...跳转google认证地址的URL中需要包含回调的地址,而这个地址必须和之前在Google API Console中配置的地址一致(可以允许是子页面)。现在我们就可以使用第三方登录了。
Teambition是一个跨平台的团队协作和项目管理工具,相当于国外的Trello。使用Teambition可以像使用白板与便签纸一样来管理项目进度,如下图所示。 ?...Teambition的Python SDK在使用OAuth2获取access_token的时候有一个坑,需要特别注意。...登录Teambition 设置Teambition应用 Teambition 是使用OAuth2来进行权限验证的,所以需要获取access_token。...使用Python获取access_token 首先在Python中安装Teambition的SDK: pip install teambition 接下来,在Python中获取授权URL: from teambition...Teambition的简单使用 要在某个工程里面创建任务,就需要知道工程的ID。首先在Teambition中手动创建一个工程,在浏览器中打开工程,URL中可以看到工程的ID,如下图所示。 ?
,也请先记住这些角色,继续往下看: 从资源拥有者,即系统用户的角度:举个例子,用户在X应用上,想使用自己在QQ中的保存的用户信息等资源。...从第三方客户端,即资源申请者的角度:QQ微信是一个大厂开发的,它那里用户量大。微信既然提供了基于OAuth2的接口,我可以获取一些基本用户数据信息,我干嘛不用呢。...将以下文件从“合二为一”的认证资源服务项目中,拆分出来。 ---- RemoteTokenServices 在独立的资源服务器应用中,OAuth2ResourceServer配置文件中加入如下配置。...---- 建表 参考官方文档中的SQL,把数据库表创建,其中保存应用客户端信息的核心表是下面的这张表: 表创建完成之后,我们为了测试方便,通过数据库工具手动插入1条数据。...当然在实际的客户端应用注册的业务开发过程中,我们不可能手动的去数据库工具执行SQL,Spring security已经为我们提供了一个服务类:JdbcClientDetailsService。
创建GitHub OAuth Apps 在Github OAuth Apps中创建一个新的应用 ?...还是和以前一样,我们在配置文件中将security的日志级别设置为debug logging: level: org.springframework.security: debug 重新启动应用之后...,从控制台输出中我们可以看到与普通spring-security应用不同的地方在于整个过滤链多出了以下几个过滤器: OAuth2AuthorizationRequestRedirectFilter OAuth2LoginAuthenticationFilter...的access_token地址获取令牌 上面就是标准的authorization_code授权模式,OAuth2AuthorizationRequestRedirectFilter的作用就是上面步骤中的...,首先通过code获取access_token,然后通过access_token获取用户信息,这和标准的oauth2授权码模式一致。
正当我兴致勃勃打开文档学习的时候,脸上笑容逐渐消失,这确定是OAuth的吗? 参数都变了,跟OAuth(不管是1.0还是2.0)规定不一样,然而这还不是最离谱的。...企业微信的access_token居然和上面扫码获取code这一步完全无关,甚至获取access_token才是第一步! ❝而且这个access_token接口,你还不能频繁调用,要缓存起来公用。...配置内网穿透域名 在创建应用这一页往下拉到页面底端,你会看到: 点击已启用进入下面这个页面: 这里配置你授权登录应用生产的正式域名或者上面内网穿透的域名,注意只配置域名,而且不能使用localhost...适配OAuth2获取access_token 经过这一步扫码拿到code就不成问题了,按照OAuth2该拿access_token了,需要自定义一个函数式接口: Converteraccess_token的缓存,我放在了下一步进行解决。 适配获取用户信息 code和access_token都拿到了,最后一步获取用户的信息。
这类情况的解决思路一般是在访问入口,例如Ingress上添加一层访问认证,可以借助于basic auth实现此功能,但basic auth存在过于简单、账号权限不好控制、需要手动维护等诸多问题。...参数: 回调URL:指GitLab在用户通过身份验证后应将其发送到的端点,对于oauth2-proxy应该是https:///oauth2/callback 范围:应用程序对GitLab用户配置文件的访问级别...客户端被重定向到oauth2登录页面后,自动进入Gitlab的登录页面, 用户登录Gitlab后,Gitlab再将客户端重定向到在Gitlab中配置的应用回调地址。...客户端访问回调地址后,oauth2_proxy在客户端设置cookie,并将客户端重定向到最初的访问地址。...最后,还要提到的一点是,我这里一开始使用的Gitlab是已有的10.8.4版本,调试了关于Oauth2-proxy的很多参数一直不成功,也没有找到解决办法,但是按照官方的配置与github对接时却没有报任何异常
若客户端在 Oauth 流程中需要用户的用户名与密码的(authorization_code、password),则该字段可以不需要设置值,因为服务端将根据用户在服务端所拥有的权限来判断是否有权限访问对应的...在实际应用中,该值一般是由服务端处理的,不需要客户端自定义 additional_information 这是一个预留的字段,在 Oauth 的流程中没有实际的使用,可选,但若设置值,必须是 JSON...在实际应用中,可以用该字段来存储关于客户端的一些其他信息,如客户端的国家、地区、注册时的 IP 地址等等 create_time 数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段...数据的创建时间,精确到秒,由数据库在插入数据时取当前系统时间自动生成(扩展字段) token_id 从服务器端获取到的 access_token 的值 token 这是一个二进制的字段,存储的数据是...response_type=token&client_id=web,与授权码模式一样会跳转至登录页登录。不同的是登录成功后直接跳转回调地址,在参数中有 access_token。 ? ?
但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。...具体而言,网页授权流程分为四步: 1、引导用户进入授权页面同意授权,获取code 2、通过 code 换取网页授权 access_token(与基础支持中的access_token不同) 3、如果需要,...code的安全性且必须有在MP配置回调页面的域名。...特别注意 : code作为换取 access_token 的票据,每次用户授权带上的 code 将不一样,code 只能使用一次,5分钟未被使用自动过期。...授权获取用户信息必须在微信客户端中打开或者使用微信提供的 微信开发者工具 2、redirect_url 参数错误 请检查appId对应的公众平台中设置的授权域名是否与你项目中配置的域名保持一致 3、测试号测试时提示未关注测试号