C# ASP.Net Azure OpenId集成

C# ASP.Net Azure OpenId集成,c#,azure,azure-active-directory,C#,Azure,Azure Active Directory,我正在尝试创建一个使用Azure AD进行SSO身份验证的项目。应用程序的azure端已配置,我能够使用以下代码获得SAML身份验证: app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); app.UseCookieAuthentication(new CookieAuthenticationOptions()); app.UseWsFederationAuthen

我正在尝试创建一个使用Azure AD进行SSO身份验证的项目。应用程序的azure端已配置,我能够使用以下代码获得SAML身份验证:

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

app.UseCookieAuthentication(new CookieAuthenticationOptions());

app.UseWsFederationAuthentication(
    new WsFederationAuthenticationOptions
    {
        Wtrealm = realm,
        MetadataAddress = adfsMetadata
    });
通过这种方式配置,站点可以很好地用于web页面,但我还需要能够从本机客户端调用API调用。我想使用JWTs对本机应用程序进行身份验证,并找到了关于如何设置单独的本机应用程序来为JWTs提供服务的文档。我找到了有关使用添加连接服务向空白站点添加身份验证的说明,它似乎将站点配置为使用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:签名验证失败。无法匹配密钥: “Vxa8HJ8gNB1XfxYnIDHBl2YuSFc”,标记: “{”typ:“JWT”,“alg:“RS256”,“x5t:“Vxa8HJ8gNB1XfxYnIDHBl2YuSFc”,“kid:“Vxa8HJ8gNB1XfxYnIDHBl2YuSFc”}.{”aud:“c13f71a0-e658-4432-a61e-24140f2b5890”,“iss:“iat:”1542235664,“nbf:”1542235664,“exp:”1542239564,“aio:“ASQA2/8JAAAA6+NTWGTWS4MQ7GCOQDJU112”

我已经查看了我的应用程序的OpenId元数据,其中的keyVxa8HJ8gNB1XfxYnIDHBl2YuSFc不在任何地方。我是否遗漏了一些简单的东西

编辑


看起来配置的权限是

https://login.microsoftonline.com/{tenant}

我与微软开了一个案例,他们的一位开发人员帮助发现问题出在OpenId和企业应用程序上我能够使网站正确地进行身份验证。我通过从头创建一个企业应用程序并比较web/API应用程序和企业应用程序之间的浏览器行为来测试这一点。问题只出现在企业应用程序上。我不确定区别是什么,但它是在Microsoft方面。此外,它只出现在OpenId上。正如我前面提到的,我能够让它与SAML一起工作。我不清楚Web/API应用程序和企业应用程序之间的区别。

您使用的是哪个权限?我在上面添加了一个用于租户id的占位符。是否要尝试使用{tenant}/v2.0?我尝试了,但仍然得到了相同的结果。顺便说一句,我必须向代码中添加
IdentityModelEventSource.ShowPII=true;
,以获得错误,从而显示签名验证失败的原因。