Azure active directory Azure AD在使用刷新令牌请求续订时返回未签名的Id令牌
我正在使用Azure AD v1端点授权我的Web应用程序 在初始身份验证时,我没有将access_令牌设置为有效的jwt令牌。然而,我得到的id_令牌是有效的jwt,acces_令牌是刷新_令牌的值,这看起来很奇怪 我可以使用id_令牌作为承载令牌来调用我的Web API。一切都好 现在,当id_令牌过期时,我将使用我的刷新令牌发送以下刷新令牌请求。我将获得未签名的id_令牌作为响应。由于新的id_令牌未签名,因此使用此id_令牌我无法访问Web API。 我错过什么了吗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
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
您还可以在此处找到一个示例应用程序:好吧,您应该使用访问令牌来调用API:)@juunas获取有效的访问令牌在评论GetClaimsFromUserInfoEndpoint属性时您刚才回答了您自己的问题:)JWT承载选项受众应该是API的客户端id。如果您将其设置为Web应用的客户端id,它将只接受提供给Web应用的id令牌,并且您基本上共享应用标识。当您在API的JWT选项中配置
访问群体/validudience/validudience
时,配置验证,检查令牌中的aud
声明是否与配置的内容匹配。如果没有,你会得到一个401。@juunas完美…我现在明白我的错误了…非常感谢!!