问题标签 [implicit-flow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oauth-2.0 - OAuth2 隐式流程 - IFrame 刷新身份
我正在为隐式流开发 OAuth2 客户端,并且正在实现基于 IFrame 的刷新(因为隐式流中没有刷新令牌)。
我坚持的是试图找出将访问令牌传递回服务器的“标准”。我是通过 access_token 查询字符串参数传回,还是在设置 IFrame 源时必须以某种方式设置 Authorization 标头(这似乎有点困难)?
cookies - 是否可以在没有 cookie 的情况下进行隐式流身份验证?
我正在开发同时使用 .NET Framework 和 .NET Core 的项目,分别使用 ID Server 3/4(当然也分别使用 ID Server 3/4),并且我已经意识到隐式流程及其对 Javascript 客户端的工作方式。我确实注意到它使用 cookie,我认为这就是为什么会发生很多重定向等等。
但事后看来,这让我想知道如果我们当时知道隐式流但不使用 cookie 并且仅依赖会话存储,那么以前的项目是否会更好。那有可能吗?
oauth-2.0 - oauth2 隐式流的理想过期时间是多少
我了解访问令牌在 OAuth2 隐式流中的过期时间很短,因此应用程序被迫不断刷新它们(使用 iframe 或其他方式),从而使服务有机会在需要时撤销应用程序的访问权限。
但理想的到期时间是多少?应该是 15 分钟/多/少吗?
authentication - 收到 id_token 后无法执行静默刷新,同时实现隐式流程,Azure 广告和谷歌身份服务
我在 azure AD 注册中启用了隐式流支持,它说:-“要启用隐式授权流,请选择您希望由授权端点颁发的令牌:”并且我正在尝试对多个身份提供身份验证,因此没有使用 msal 或 adal。但是我无法使用隐藏的 iframe 实现静默刷新。
- 发送授权请求,范围包括 openid 和响应类型为 id_token(在弹出窗口中)
- 接收 id_token 以及包括会话状态在内的所有其他内容。
现在(通过Iframe)我正在尝试通过发送propmt = none来使用静默身份验证获取令牌,并且id_token_hint = prev_id_token也尝试发送login_hint = preferred_username(我从JWTtoken.payloadObj.preferred_username获得)
PS 还尝试将 response_type 作为 id_token 和 token 发送,然后尝试静默刷新,每次都失败并出现此错误:-
error=login_required&error_description=AADSTS50058%3a+Session+信息+is+not+sufficient+for+单点登录。%0d%0aTrace+ID%3a+5ceb4386-f4b1-40aa-8fb5-797c14379b00%0d%0aCorrelation+ID %3a+3401101e-9098-4048-bb05-78926181d733%0d%0aTimestamp%3a+2019-04-17+10%3a12%3a47Z&state={我的状态}
请让我知道我缺少什么,它需要是隐式流程。我需要使用隐藏的 i 框架实现静默刷新。
我已经按照这篇文章中提到的那样实现了它:- https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow
javascript - 使用隐式流时的重放攻击
我有一个使用隐式流程来授权用户的 React 应用程序。
流程如下: 1. 如果 sessionStorage 中没有保存访问令牌或用户信息 - 用户将被重定向到登录页面。2. 用户登录并被重定向到 React App 的主页。2.1。当重定向回主页时,重定向 URL 已经有 access_token 和 id_token 作为 url 参数的一部分。3. React App 保存访问令牌并解码 id_token 以获取有关用户的信息。
现在的问题是,如果有人在 2.1 中窃取了重定向 URL。他们可以将其粘贴到浏览器中并基本上重播此登录。
解决方案之一是实施 nonce。
https://auth0.com/docs/api-auth/tutorials/nonce
根据上面的文章,nonce 应该存储在 localStorage 中,一旦我得到带有 nonce 的 id_token - 我应该使用来自 localStorage 的原始 nonce 验证它。但是攻击者可以做以下事情: 1. 拿走这个 id_token。2. 使用任何在线工具对其进行解码。3. 检查里面有什么样的随机数。4. 使用 Chrome 开发工具修改 hist localStorage 所需的 nonce。
有人知道防止此类攻击的更好想法吗?
openid-connect - 如何使用单页应用程序和 openid 连接隐式流撤销访问令牌?
最近我用 openid connect 编写了一个身份提供程序。我已经公开了令牌和 oauth 流的端点。
我知道在 SPA 的情况下,我们无法提供刷新令牌来撤销任何一个令牌。所以我所做的是当我的访问令牌过期时,我总是调用 IDP 服务器并刷新我的令牌,但我面临的问题是身份验证没有静默放置在后台,因为有时会出现一个闪屏并且我的回调 url 调用我再次保存令牌的地方。
那么有什么方法可以在用户不知情的情况下撤销访问令牌。
一种方法是在我的令牌过期后调用身份提供者并在后台刷新我的令牌,但如果同时用户尝试使用旧的调用 api,他仍会收到 401。
azure - MS Identity Azure 应用程序已注册但在隐式流中发送未授权客户端
我已经在 Azure 中为 Microsoft Identity 平台注册了一个应用程序。我将其配置为允许 MS 帐户(例如 outlook.com),并且基本上在此处和此处的一些在线快速入门中完成了所有操作的一些在线快速入门中完成了所有操作(“向您的 Web 应用程序添加凭据”除外)。我还选中了启用隐式流的框。
我将我的 React 应用程序重定向到要登录的 URL(使用隐式流程),我输入了我的用户名,但随后我看到了
未授权客户端:客户端不存在或未为消费者启用。如果您是应用程序开发人员,请通过 Azure 门户中的应用程序注册配置新应用程序,网址为https://go.microsoft.com/fwlink/?linkid=2083908
就像我上面提到的那样,我已经经历了几个快速入门并在这里阅读了有关隐式流程的信息,并按照他们的示例编写了我的代码。
我还尝试删除应用程序注册并重新开始。没运气。
尝试实现隐式流的 JS 代码
将浏览器重定向到类似于 Microsoft 在其隐式流页面上的第一个示例的 URL 的 JS 代码
Azure 中的应用程序配置:
Azure -> 身份 -> 应用注册 -> MyApp -> 身份验证
- 重定向 Uri:http://localhost:3000/signin(React 应用程序在 3000 上运行,我为 /signin 配置了路由)
- 不使用任何建议的重定向。
- 已选中 ID 令牌和访问令牌的隐式复选框
- 启用实时 SDK 支持
- 支持的帐户类型设置为“任何组织目录中的帐户和个人 Microsoft 帐户(例如 Skype、Xbox、Outlook.com)”
Azure -> 身份 -> 应用注册 -> MyApp -> API 权限
- 质谱图
- 用户读
- 电子邮件
- 轮廓
- 打开ID
从我阅读的文档中,我认为我已经对 id 令牌做了足够的工作。我不确定必须进行哪些调整才能使其正常工作。
redirect - Google 上的操作:隐式 Oauth 流,重定向失败
我按照以下说明为隐式流实现了自己的 Oauth 服务器:https ://developers.google.com/actions/identity/oauth2?oauth=implicit
看起来很简单,因为我只需要在检查客户端详细信息后重定向令牌。但是我遇到了问题。我发送这个: https ://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING
但是,当您重定向到此 URL 时,这似乎会扰乱 google 上的操作。“Sing in Helper”意图似乎起作用然后失败,控制台没有显示任何错误Intent not working
我将不胜感激任何帮助。
c# - 带有 C# Windows 窗体的 OAuth2 隐式流
我正在开发需要使用隐式流进行身份验证的 ac# windows 窗体应用程序(客户端不接受另一个流)。根据要求,我需要打开默认系统浏览器进行身份验证(因此应用程序上没有嵌入式 Web 视图)
我正在尝试使用OidcClient C#和示例,但我无法让它工作。
我得到的最接近的是使用ConsoleSystemBrowser
. 但是使用下面的代码我总是得到一个UnknownError
with empty response
。
我可以在浏览器中看到 id_token: http://127.0.0.1:54423/auth/signin-oidc#id_token=XXX
。我该如何阅读它?
angular - 如何使用 iFrame 在隐式流中手动进行静默刷新(使用 Identity Server 4、Angular 2+)
我正在尝试使用带有隐式流的 iFrame 进行静默刷新。我不想使用automaticSilentRenew,因为它效率不高。我在客户端使用Angular 8 中的oidc-client库。所以,有两件事正在发生:
1.)我正在使用 auth-guard 来保护重要组件。在 auth-guard 中,我正在检查令牌是否有效,如果不是,那么我将调用auth-service 类的signinRedirect来获取新令牌。
2.) 我没有使用 auth-guard 保护安全 API 调用组件,因此我可以获得无效令牌的401 未授权错误。但是如果我用 auth-guard 保护它,它会在获取新的令牌集并且原始请求丢失后将我路由到 auth-callback。
我想以某种方式自动化这个过程。就像,使用 auth-guard 保护 API 调用组件,当我尝试使用过期令牌访问 API 时,auth-guard 开始发挥作用,在后台使用有效令牌更新当前请求,以提供无缝的用户体验.
我试图在我的 auth-service 类的构造函数中捕获addAccessTokenExpiring事件并调用signinSilent来获取新的 access_token。该事件确实在令牌到期之前开始,但我在此事件中未定义this.manager 。
请分享您的宝贵意见以实现这一目标。任何现有的例子都将是非常可观的。
感谢您!
塔伦·奥里