挖一點點後,我發現其中介紹瞭如何編程的方式驗證通過使用JwtSecurityTokenHandler class的ADFS的OAuth 2.0認證流程制定的基於JWT認證令牌following answer。代碼示例可以在鏈接的答案中找到。
這將允許我來創建自定義授權過濾器,其然後我可以作爲控制器或控制器的方法的一個屬性使用。此過濾器將分析客戶端請求中的授權標頭,檢測其中包含的身份驗證令牌的類型,然後啓動相應的程序邏輯以驗證/驗證身份驗證令牌。
沿東西,也許這些線路:
public enum AuthTokenType
{
OAuth2Bearer,
Custom
}
public class CustomAuthenticationAttribute : IAuthenticationFilter
{
public bool AllowMultiple
{
get
{
throw new NotImplementedException();
}
}
public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
HttpRequestMessage incommingRequest = context.Request;
HttpHeaders headers = incommingRequest.Headers;
string authHeader = GetHeader(headers, "Authorization");
AuthTokenType authTokenType = DetecteAuthTokenType(authHeader);
if (authTokenType == AuthTokenType.OAuth2Bearer)
{
// Validate auth token using the JwtSecurityTokenHandler class
}
else if (authTokenType == AuthTokenType.Custom)
{
// Validate auth token using whatever is necessary
}
else
{
// auth token doesn't correspond to a recognized type or hasn't been part of the client request - reject request
}
}
public AuthTokenType DetectAuthTokenType(string authHeader)
{
// Analyze the authorization header string and return its proper type
}
private string GetHeader(HttpHeaders headers, string key)
{
IEnumerable<string> keys = null;
if (!headers.TryGetValues(key, out keys))
return null;
return keys.First();
}
}
我不知道你的使用情況是什麼,但,這似乎是一些認爲thinktecture與identityserver3使用的例子。 https://identityserver.github.io/Documentation/。我花了一個週末的時間來了解一些例子,但是這很簡單。我還添加了提供管理屏幕的identityreboot。 – Bill
嗨比爾。感謝提示。這絕對是我將考慮的事情,因爲它可以[爲auth令牌實現自定義驗證](https://identityserver.github.io/Documentation/docsv2/configuration/serviceFactory.html)。 –