Azure active directory Azure AD在使用刷新令牌请求续订时返回未签名的Id令牌

Azure active directory Azure AD在使用刷新令牌请求续订时返回未签名的Id令牌,azure-active-directory,openid-connect,refresh-token,azure-ad-b2b,Azure Active Directory,Openid Connect,Refresh Token,Azure Ad B2b,我正在使用Azure AD v1端点授权我的Web应用程序 在初始身份验证时,我没有将access_令牌设置为有效的jwt令牌。然而,我得到的id_令牌是有效的jwt,acces_令牌是刷新_令牌的值,这看起来很奇怪 我可以使用id_令牌作为承载令牌来调用我的Web API。一切都好 现在,当id_令牌过期时,我将使用我的刷新令牌发送以下刷新令牌请求。我将获得未签名的id_令牌作为响应。由于新的id_令牌未签名,因此使用此id_令牌我无法访问Web API。 我错过什么了吗 POST /tok

我正在使用Azure AD v1端点授权我的Web应用程序

在初始身份验证时,我没有将access_令牌设置为有效的jwt令牌。然而,我得到的id_令牌是有效的jwt,acces_令牌是刷新_令牌的值,这看起来很奇怪

我可以使用id_令牌作为承载令牌来调用我的Web API。一切都好

现在,当id_令牌过期时,我将使用我的刷新令牌发送以下刷新令牌请求。我将获得未签名的id_令牌作为响应。由于新的id_令牌未签名,因此使用此id_令牌我无法访问Web API。 我错过什么了吗

POST /token HTTP/1.1
Host: {authority}
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
client_id=mvc&
client_secret=secret&
refresh_token=AQABAAAAAADX8GCi6J
&scope=openid%20profile%20offline_access
我正在使用以下启动配置来设置身份验证

services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddCookie(options =>
            {
                options.ExpireTimeSpan = TimeSpan.FromSeconds(1000);
                options.Cookie.Name = "mvcapplication";
            })
            .AddOpenIdConnect(option=>{
        options.Authority = "{aad v1 endpoint}";
                options.ClientId = "mvc";
                options.ClientSecret = "secret";
                options.ResponseType = "code id_token";
                options.ResponseMode = "form_post";
                options.SignInScheme = "Cookies";
                options.CallbackPath = "/Home/Index/";
                options.RequireHttpsMetadata = false;
                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;

                //Default Scopes
                options.Scope.Add("openid");
                options.Scope.Add("profile");
                options.Scope.Add("offline_access");
         });

总结评论中的讨论:

  • 获取访问令牌时,使用API的客户端id/应用程序id或应用程序id URI作为
    资源
  • 将API配置为接受上述一个或两个有效访问群体
  • 删除
    GetClaimsFromUserInfoEndpoint
    提供了有效的访问令牌
您可以在以下位置查看有关在ASP.NET Core MVC(2.0)应用程序中设置Azure AD身份验证的更多信息:


您还可以在此处找到一个示例应用程序:

好吧,您应该使用访问令牌来调用API:)@juunas获取有效的访问令牌在评论GetClaimsFromUserInfoEndpoint属性时您刚才回答了您自己的问题:)JWT承载选项受众应该是API的客户端id。如果您将其设置为Web应用的客户端id,它将只接受提供给Web应用的id令牌,并且您基本上共享应用标识。当您在API的JWT选项中配置
访问群体/validudience/validudience
时,配置验证,检查令牌中的
aud
声明是否与配置的内容匹配。如果没有,你会得到一个401。@juunas完美…我现在明白我的错误了…非常感谢!!