/
AppIdAuthenticationProvider.cs
59 lines (52 loc) · 2.48 KB
/
AppIdAuthenticationProvider.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Net.Http;
using System.Threading.Tasks;
using VaultSharp.Backends.Authentication.Models.AppId;
using VaultSharp.Backends.System.Models;
using VaultSharp.DataAccess;
namespace VaultSharp.Backends.Authentication.Providers.AppId
{
[Obsolete("The AppId Authentication backend in Vault is now deprecated with the addition " +
"of the new AppRole backend. There are no plans to remove it, but we encourage " +
"using AppRole whenever possible, as it offers enhanced functionality " +
"and can accommodate many more types of authentication paradigms.")]
internal class AppIdAuthenticationProvider : IAuthenticationProvider
{
private readonly AppIdAuthenticationInfo _appIdAuthenticationInfo;
private readonly IDataAccessManager _dataAccessManager;
private readonly bool _continueAsyncTasksOnCapturedContext;
public AppIdAuthenticationProvider(AppIdAuthenticationInfo appIdAuthenticationInfo, IDataAccessManager dataAccessManager, bool continueAsyncTasksOnCapturedContext = false)
{
_appIdAuthenticationInfo = appIdAuthenticationInfo;
_dataAccessManager = dataAccessManager;
_continueAsyncTasksOnCapturedContext = continueAsyncTasksOnCapturedContext;
}
public async Task<string> GetTokenAsync()
{
var requestData = new
{
app_id = _appIdAuthenticationInfo.AppId,
user_id = _appIdAuthenticationInfo.UserId
};
var response =
await
_dataAccessManager.MakeRequestAsync<Secret<Dictionary<string, object>>>(LoginResourcePath,
HttpMethod.Post, requestData).ConfigureAwait(_continueAsyncTasksOnCapturedContext);
if (response != null && response.AuthorizationInfo != null && !string.IsNullOrWhiteSpace(response.AuthorizationInfo.ClientToken))
{
return response.AuthorizationInfo.ClientToken;
}
throw new Exception("The call to the authentication backend did not yield a client token. Please verify your credentials.");
}
private string LoginResourcePath
{
get
{
var endpoint = string.Format(CultureInfo.InvariantCulture, "auth/{0}/login", _appIdAuthenticationInfo.MountPoint.Trim('/'));
return endpoint;
}
}
}
}