我正在尝试创建一个使用 Azure AD 进行 SSO 身份验证的项目。应用程序的 azure 部分已配置完毕,我能够使用以下代码获得 SAML 身份验证:
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata
});
以这种方式配置的网站对于网页来说可以正常工作,但我还需要能够从 native 客户端调用 API 调用。我想使用 JWT 对 native 应用程序进行身份验证,并找到了有关如何设置提供 JWT 的单独 native 应用程序的文档。我找到了有关使用添加连接服务向空白网站添加身份验证的说明 here它似乎将网站配置为使用 OpenId,并在我的 Startup.Auth.cs 文件中创建以下代码:
IdentityModelEventSource.ShowPII = true;
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = Authority,
PostLogoutRedirectUri = postLogoutRedirectUri
});
不幸的是,当我运行新配置的空白站点时,出现以下错误:
IDX10501: Signature validation failed. Unable to match keys: 'Vxa8HJ8gNB1XfxYnIDHBl2YuSFc', token: '{"typ":"JWT","alg":"RS256","x5t":"Vxa8HJ8gNB1XfxYnIDHBl2YuSFc","kid":"Vxa8HJ8gNB1XfxYnIDHBl2YuSFc"}.{"aud":"c13f71a0-e658-4432-a61e-24140f2b5890","iss":"https://sts.windows.net/8948afa6-51e3-4041-8303-5688ba9c8135/","iat":1542235664,"nbf":1542235664,"exp":1542239564,"aio":"ASQA2/8JAAAA6+NtWgTWs4mQi7gcoqDJMWDjmQtgxL79oC3U112+XjI=",...
我查看了我的应用的 OpenId 元数据, key Vxa8HJ8gNB1XfxYnIDHBl2YuSFc 不在其中。有什么简单的事情我错过了吗?
编辑
<小时/>看起来配置的权限是
https://login.microsoftonline.com/{tenant}
最佳答案
我向 Microsoft 立案,他们的一位开发人员帮助发现问题出在 OpenId 和 Enterprise 应用程序上。当我创建非企业应用程序(Web/API)时,我能够使网站正确进行身份验证。我通过从头开始创建企业应用程序并比较 Web/API 应用程序和企业应用程序之间的浏览器行为来对此进行测试。该问题仅出现在企业应用程序中。我不确定有什么区别,但这是微软这边的。此外,它仅显示 OpenId。正如我上面提到的,我能够让它与 SAML 一起工作。我不清楚 Web/API 应用程序和企业应用程序之间的区别。
关于c# - ASP.Net Azure OpenId 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53310057/