C# Azure AD回调不会验证ExternalAsync方法

C# Azure AD回调不会验证ExternalAsync方法,c#,google-signin,identityserver3,openid-connect,azure-active-directory,C#,Google Signin,Identityserver3,Openid Connect,Azure Active Directory,我正在使用OpenID Connect连接到Azure ID,我可以在Azure中成功进行身份验证,并将请求返回到OpenID Azure AD配置中指定的重定向uri app.UseOpenIdConnectAuthentication( 新的OpenIdConnectAuthenticationOptions { AuthenticationType=“测试”, Caption=“测试Azure广告”, SignInAsAuthenticationType=signInAsType, Cl

我正在使用
OpenID Connect
连接到Azure ID,我可以在Azure中成功进行身份验证,并将请求返回到OpenID Azure AD配置中指定的重定向uri


app.UseOpenIdConnectAuthentication(
新的OpenIdConnectAuthenticationOptions
{
AuthenticationType=“测试”,
Caption=“测试Azure广告”,
SignInAsAuthenticationType=signInAsType,
ClientId=“”,
权威=”https://sts.windows.net/",
ResponseType=OpenIDConnectResponseType.CodeIdToken,
重定向URI=”https://localhost:44392/External/Login,这是另一个webapi项目,而不是identityserver主机。
AuthenticationMode=AuthenticationMode.Passive,
});

成功验证后,它将重定向回
https://localhost:44392/External/Login
带有代码,IdToken

问题:

  • 它不是在重定向时停止在
    AuthenticateExternalAsync
    方法,而不像
    google signin

  • 我是否必须解码
    IdToken
    JWT才能获得用户声明

  • 在重定向方法中,如何从IdSrv3生成
    访问令牌
    ,以授权其他webapi
  • 用户可以同时拥有本地登录和多个外部登录(Azure AD、Google等)。在这种情况下,SSO如何与
    IDsrv3
    一起工作

  • 是否有实施外部登录的
    IdSrv3
    示例?最好是Azure广告


  • 我刚刚经历了这个过程,所以我会尽力回答,以帮助您/其他人。如果我误解了你的问题,请原谅

  • 应该调用AuthenticateExternalAsync,但您需要让AzureAd返回到IDS(身份服务器)而不是您的应用程序。您的流应该类似于:app->IDS->AzureAd->IDS(AuthenticateExternalAsync)->app

  • AuthenticateExternalAsync
    中,您可以获得
    ExternalAuthenticationContext.ExternalIdentity
    ,其中包含声明-无需解码JWT令牌

  • AuthenticateExternalAsync
    中返回成功的
    AuthenticatedResult
    后,IDS将处理此问题,类似于
    context.AuthenticateResult=new AuthenticateResult(“UserId”、name、claims”)

  • 对。您可以出于SSO的目的强制使用登录方法,否则我认为IDS会在第一次登录后处理它

  • 我发现这很有用(通过IDS和AzureAd的设置运行),但它确实使用了旧的Azure门户,而不是新的。他们家里似乎没有任何样品

  • 希望有点帮助:)