Шаблон выполняет всю аутентификацию, получает токен доступа (угадайте его на основе клиента, помогите!), Но использование его для вызова API API не работает,
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// Instead of using the default validation (validating against a single issuer value, as we do in
// line of business apps), we inject our own multitenant validation logic
ValidateIssuer = false,
// If the app is meant to be accessed by entire organizations, add your issuer validation logic here.
//IssuerValidator = (issuer, securityToken, validationParameters) => {
// if (myIssuerValidationLogic(issuer)) return issuer;
//}
};
options.GetClaimsFromUserInfoEndpoint=true;
options.SaveTokens = true;
//options.Scope.Add("testapi");
options.Scope.Add("offline_access");
// options.ResponseType = "code id_token";
options.Events = new OpenIdConnectEvents
{
OnTicketReceived = context =>
{
// If your authentication logic is based on users then add your logic here
return Task.CompletedTask;
},
OnAuthenticationFailed = context =>
{
context.Response.Redirect("/Error");
context.HandleResponse(); // Suppress the exception
return Task.CompletedTask;
},
//OnTokenResponseReceived = context =>
//{
// JustChecking(context);
// return Task.CompletedTask;
//},
//If your application needs to do authenticate single users, add your user validation below.
OnTokenValidated = context =>
{
var accessToken = context.SecurityToken as JwtSecurityToken;
if (accessToken != null)
{
ClaimsIdentity identity = context.Principal.Identity as ClaimsIdentity;
if (identity != null)
{
identity.AddClaim(new Claim("access_token", accessToken.RawData));
}
}
JustChecking(context);
return Task.CompletedTask;
}
//OnTokenResponseReceived = context =>
//{
// var toks = context.TokenEndpointResponse.AccessToken;
// var toks2 = context.TokenEndpointResponse.IdToken;
// return Task.CompletedTask;
//},
};
});
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
попытался получить несколько вещейтокен доступа, я не уверен, что это тот, который мне нужен, пожалуйста, дайте мне знать, если есть лучшие способы получить access_token внутри контроллера, и если есть способ, который я могу запросить специально для токена доступа sharepoint, любые полезные ресурсы приветствуются, спасибо
public async Task<HttpResponseMessage> callSP() {
var acToken = User.Claims.FirstOrDefault(c => c.Type == "access_token")?.Value;
// var acessToken = await HttpContext.Authentication.GetAuthenticateInfoAsync();
// ClientContext clientContext = TokenHelper.GetClientContextWithAccessToken(targetWeb, AccessToken);
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", acToken);
var result = await client.GetAsync("https://sharepointSite/_api/web/lists");
return result;
}