我将应用程序从Azure Active Directory身份验证切换为使用Identity Server进行身份验证(使用Azure AD作为外部身份验证)。身份验证和授权部分已经实现,我的web API成功验证了令牌,并给我我要求的东西。图形API中的Identity Server 4(具有外部Azure AD身份验证)令牌无效
我们的应用程序还使用外部API,例如需要Azure AD令牌的Graph API和SharePoint Online。例如。当我去https://graph.microsoft.com/v1.0/me
我与令牌JS应用程序,我回来从身份服务器,图形API响应
401
{
"error": {
"code": "InvalidAuthenticationToken",
"message": "Access token validation failure.",
"innerError": {
"request-id": "ce7651bb-5dc4-49e9-90ff-02df440ed4ad",
"date": "2017-08-11T08:53:12"
}
}
}
我预计,因为Identity Server的是给我自己的道理,而不是通过现有的令牌是由Azure AD提供。我将Azure AD令牌中的所有声明复制到身份服务器令牌中,但没有更改。
什么是正确的方法,使我的应用程序能够继续使用需要Azure AD令牌的API?
编辑:
什么,我希望是这样的。上的js
- 点击登录按钮(或任何其他客户端应用程序)
- 重定向到Identity Server登录屏幕
- 点击Azure的AD外部认证
- 重定向到微软的登录页面,输入您的凭据有
重定向到身份服务器应用程序
a。我开始Fiddler,看到“微软”重定向到
{IdentityServerAppUrl}/signin-aad
(我想这是因为我在OpenID Connect选项上配置了CallbackPath
属性)。此请求携带一个Cookieidsrv.external
。我不确定,但我认为里面是来自Azure AD的访问令牌。我不知道如何解码。我尝试了base64,但它不起作用。b。当这个请求完成后,重定向到
{IdentityServerAppUrl}/account/ExternalLoginCallback
。在这个动作方法中,我使用调试器检查请求中的所有字段和数据,但我无法从AAD中找到令牌。我希望得到令牌并将其放在额外的calim中。- Identity Server应用程序使用自己的令牌和其他包含Azure AD令牌的JS客户端应用程序重定向,该令牌在图API和SharePoint上有效。
首先我想找到处理{IdentityServerAppUrl}/signin-aad
的Action方法或中间件?
其次,有没有办法从Azure AD或任何其他外部提供商获取令牌{IdentityServerAppUrl}/account/ExternalLoginCallback
Action方法?
请注意,我是这种东西的新手,也许我完全错了这种想法。
我设法在没有Identity Server的情况下进行Azure AD身份验证,但知道我们有请求拥有多个外部提供程序,我希望能够在一个应用程序中处理所有身份验证。如果有一天我收到请求,需要添加额外的外部提供者,我只需要在一个地方添加。
您可以尝试使用OpenID Connect ASP.Net身份服务器中的OWIN中间件获取microsoft graph api的访问令牌,然后将访问令牌/刷新令牌与用户标识信息一起存储在数据库中。使用用户标识在数据库中搜索访问令牌/刷新令牌以调用Microsoft图形。 –
这个解决方案经过我的头,但我希望找到更简单的东西。像告诉身份服务器4到用户AzureAd令牌,而不是创建他自己的。总线仅用于其他提供商的AzureAd的外部认证使用默认行为。 –