我正在尝试为ASP做一个应用程序注册授权。. NET Core 6 Web API。我使用应用程序注册凭证获得令牌并对API进行身份验证。令牌验证似乎正在工作,但我得到一个401-未经授权的错误,没有任何信息。在Postman中,它显示为无效令牌。
下面是我的客户端设置来获取令牌var keyValues = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("tenant_id", tenant_id),
new KeyValuePair<string, string>("client_id", client_id),
new KeyValuePair<string, string>("client_secret", client_secret),
new KeyValuePair<string, string>("scope", scope),
new KeyValuePair<string, string>("grant_type", "client_credentials")
};
var c = new FormUrlEncodedContent(keyValues);
tokenUrl = "https://login.microsoftonline.com/"+tenant_id+"/oauth2/v2.0";
var call = await client.PostAsync(tokenUrl + "/token", c);}
Web APIappsettings.json
设置匹配令牌参数
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com",
"Domain": "<domain>",
"TenantId": "<tenant>",
"ClientId": "<clientId>",
"ClientSecret": "<clientSecret>",
"Roles": "api://<role>"
},
}
API正在使用新的调用从appsettings.json
获取参数。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMicrosoftIdentityWebApiAuthentication(configuration);
API正在被击中并验证令牌:
Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter: Information: IDX10239: Lifetime of the token is valid.
Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter: Information: IDX10234: Audience Validated.Audience: '<audience>'
Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter: Information: IDX10245: Creating claims identity from the validated token: '<claims>'.
Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter: Information: IDX10241: Security token validated. token: <'token>' `
我的客户收到一个401 -未授权,没有其他信息。
终端在没有授权的情况下被攻击。
控制器在开启授权的情况下永远不会命中路由中的Get。应用注册具有API权限集,并具有admin权限。
我一直在与微软合作解决这个问题,这个看似直接的身份验证把我们俩都难住了。
结果表明,解决方案是授权和身份验证在启动时的顺序。我必须改变这两行代码的顺序然后事情就开始运转了。以下是正确的顺序:
app.UseAuthentication();
app.UseAuthorization();