当前位置: 首页 > 知识库问答 >
问题:

ADFS 2016-OAuth2 SPA-静默获取新令牌

姜博
2023-03-14

我有一个SPA,用户在ADFS中进行身份验证,应用程序获得访问令牌。我正在尝试使用JS代码来模拟ADAL JS的功能,其中使用一个隐藏的iframe向ADFS请求获取新令牌。

这是 iframe 的 'src' 值:

https://../adfs/oauth2/authorize?客户端id=...

ADFS配置有两个域:AD和ADLDS(LDAP)。因此,我不确定需要传递哪些值domain_hint

请求失败,并显示消息:

https://....html?client-request-id=...#error=login_required

ADFS事件查看器显示此错误:

异常详细信息:Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthNoPassive异常:MSIS9233:发现多个身份提供者用于OAuth授权请求,提示设置为无。无法完成家庭领域发现。

ADFS 2016是否实际支持此功能?知道我做错了什么吗?

共有1个答案

阮星火
2023-03-14

prompt=nonerequest参数表示您希望在没有用户交互的情况下传递/authorize请求。但是在处理过程中,有一些事情需要用户交互-服务器可能不知道选择哪个身份提供者,因此返回错误。如果您仅通过将/authorizeURL粘贴到浏览器而不使用prompt=none参数来发出相同的请求,则服务器可能会允许您选择提供商。

你写道你想要获取访问令牌,但你的 /authorize URL 包含 response_type=id_token。如果需要访问令牌,参数应为 response_type=令牌(请参阅 RFC)。

查看Azure文档,OpenID Connect支持domain_hint请求参数,因此您的请求范围参数应包含openid值。获取ID令牌也很必要(如果需要)。

 类似资料:
  • 我们决定使用OAuth2从Hazelcast共享会话切换到无状态JWT身份验证/授权,并发现了一个不适合我们下面描述的基础结构的问题。 因此,我们有多个独立的系统,可以通过直接链接访问,即mysite.com/scs1和mysite.com/scs2。 每个scs都有自己的UI和后端,但是“会话”(通过无状态JWT授权实现)必须在多个scs之间有效。 OAuth2授权服务器是一个专用服务器(UAA

  • 我正在尝试开发一个VueJS单页应用程序,让你登录AAD,这样我就可以获得一个访问令牌来调用各种API(例如Graph)。 一旦用户登录,您必须获得一个令牌,有两种方法可以做到这一点:静默(如果失败,使用重定向体验)。 但是,我无法使用这两种方法获取令牌: 加载SPA后,我会被重定向到AAD登录页面。 然后我得到以下警报提示: 使用静默时出错: ClientAuthError:no_account

  • 我编写了一个控制台ASP.NET应用程序来获取AccessTokens。我有clientId,我的应用程序的客户端秘密,我做了以下操作: var authContext=新的AuthenticationContext(“https://login.windows.net/common/oauth2/authorize”);var acquireTask=authContext.AcquireTok

  • 我使用这个代码示例:https://github.com/azure-samples/active-directory-dotnet-graphapi-web,我知道这个代码示例使用的是客户端库,但是如果我想要执行查询(使用httpclient)直接使用api调用,我使用下面的代码从缓存中获取访问令牌:

  • 目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码: 一切运转良好!但我只需要第一次重定向。 当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。 而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无