按照指南进行操作:Web sign-in with OpenID Connect -> Get A Token。
我正在尝试发帖子请求访问令牌,
HTTP POST: 网址:https://login.microsoftonline.com/[az-directory].onmicrosoft.com/oauth2/v2.0/token?p=B2C_1_SiUpIn
邮政机构:
client_id:[Azure功能应用程序的client_id]
grant_type:authorization_code
范围:https://[url-to-azure-app-api-endpoint] openid offline_access
代码:[从登录网址检索的代码]
redirect_uri:http://[redirect-uri-used-in-login]
client_secret:[天蓝色函数中的秘密客户端ID]
我的回答是:
{
id_token:...
token_type:...
not_before:...
id_token_expires_in:...
profile_info:...
refresh_token:....
refresh_token_expires_in:...
}
请求正文都不是access_token,尽管链接说的是我会得到的。
我不确定如何从这里开始,是否有可能在我的Azure AD B2C应用程序和它要保护的功能应用程序之间缺少某种权限?
编辑经过进一步调查后,我发现了以下内容:
您使用的登录网址会影响您获得的结果代码令牌(有意义),我正在尝试以下内容:
https://login.microsoftonline.com/[ad目录 名] .onmicrosoft.com /的oauth2 / 2.0 /授权P = B2C_1_B2C&安培; CLIENT_ID = [CLIENT_ID]&安培;随机数= defaultNonce&安培; REDIRECT_URI = http://localhost:3000&scope=https://[api uri] openid offline_access& response_type = code + id_token& prompt = login
使用生成的代码,如果我如上所述向令牌端点发出请求请求,我会获得刷新令牌和ID令牌。
但是我也发现我不需要按链接发送所有的帖子参数,只需传递grant_type,code和client_secret就可以了。由于登录调用似乎实际上控制了您可以使用授权代码访问的范围,因此返回此类有意义,但我不确定为什么上面的链接说您需要传递client_id,scope和redirect_uri。
我可以使用此帖子请求中的id令牌作为授权承载令牌传递到我的azure函数应用程序中,我可以使用刷新令牌调用刷新令牌端点来刷新我可以从中获取的id令牌结果并继续在我的azure功能应用程序中使用。
所以我的问题变成了:这可以接受吗?为什么我的发现与上述链接应该可能有多大不同?我是否还需要访问令牌?
答案 0 :(得分:1)
Azure AD B2C: Call an ASP.NET Web API from an ASP.NET Web App示例提供了以下指南的逐步指南:
答案 1 :(得分:1)
关于问题的第一部分:
我不确定如何从这里开始,我是否可能在我的Azure AD B2C应用程序和它要保护的功能应用程序之间缺少某种权限?
我个人可以连接到Azure AD,如果我不使用策略,我甚至可以连接到Azure B2C。但是,如果我使用策略,那么我就不会获得access_token。
根据azure b2c documentation,我们可以使用openid connect protocol连接到azure。
在规范的successfull token response部分,它说:
在从客户端接收并验证有效且授权的令牌请求后,授权服务器返回包含ID令牌和访问令牌的成功响应。
所以我认为你并没有遗漏一些东西,但在我的观点中,因为Azure B2C响应中没有acccess_token,我们可以说Azure B2C不符合openid连接。
现在,我认为应该可以使用一个工作arround来为" openid"添加一个特定的范围。范围,以便像azure文档建议的那样具有access_token:
Azure documentation on AD v2.0 limitations:
v2.0端点上未实现OpenID Connect UserInfo端点。但是,您可能在此端点接收的所有用户配置文件数据都可从Microsoft Graph / me端点获得。
Azure documentation on tokens:
v2.0端点允许在Azure AD中注册的第三方应用程序为安全资源(如Web API)发出访问令牌。有关设置应用程序以发出访问令牌的更多信息,请参阅如何使用v2.0端点注册应用程序。在使用v2.0端点注册应用程序时,开发人员可以指定可以发出访问令牌的访问级别,称为范围。例如,Microsoft Graph API中定义的calendars.read范围授予读取用户日历的权限。