場景: Web應用程序和Web API都需要從服務器端進行身份驗證和保護。使用Azure AD對Web應用程序和Web API進行基於令牌的身份驗證B2C
要求: Web應用程序正在爲瀏覽器提供內容,瀏覽器應直接調用Web API(即Browser to API)。
問題: 是否可以使用標記驗證Web應用程序和API?
任何示例代碼或清晰的方向將不勝感激。
通常Web應用程序使用cookie認證和API使用tokens.There認證可here一些樣本項目,但他們要麼是瀏覽器API(SPA基於令牌)或服務器端Web應用程序調用從服務器的API服務器。
UPDATE 1
應用被保存TokenValidationParameters
和該應用控制器內使用bootstrapContext.Token
抓住服務器到服務器的通信。
根據@dstrockis,我試圖在驗證結束後不久(在應用程序控制器內)從Web App抓取id_token
。
我在Startup
類中使用SecurityTokenValidated
調用者OpenIdConnectAuthenticationOptions.Notifications
。 SecurityTokenValidated
收到SecurityTokenValidatedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions>
類型的參數,但我不確定在哪裏可以找到id_token
。方法如下。
private OpenIdConnectAuthenticationOptions CreateOptionsFromPolicy(string policy)
{
return new OpenIdConnectAuthenticationOptions
{
// For each policy, give OWIN the policy-specific metadata address, and
// set the authentication type to the id of the policy
MetadataAddress = String.Format(aadInstance, tenant, policy),
AuthenticationType = policy,
// These are standard OpenID Connect parameters, with values pulled from web.config
ClientId = clientId,
RedirectUri = redirectUri,
PostLogoutRedirectUri = redirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed,
//NEW METHOD INVOKE ************************************
//******************************************************
SecurityTokenValidated = OnSecurityTokenValidated
//******************************************************
},
Scope = "openid",
ResponseType = "id_token",
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
SaveSigninToken = true
},
};
}
//NEW METHOD ************************************
private Task OnSecurityTokenValidated(
SecurityTokenValidatedNotification<OpenIdConnectMessage,
OpenIdConnectAuthenticationOptions> arg)
{
//QUESTION ********************************************************
//How to find the just saved id_token using incoming parameter, arg
//*****************************************************************
return Task.FromResult(0);
}
更新2
相反的SecurityTokenValidated
,我想AuthorizationCodeReceived
和它沒有得到被調用。正如這裏所討論的,我的redirect url does have an ending slash也是如此。
任何想法?
你能解釋一下多一點嗎?此方法何時執行?你如何實施解決方案? – zuckerthoben
所有這些都在Web應用程序(而不是API)的App_Start目錄中的Startup.Auth.cs的Startup類中完成。您需要首先對Web App和API進行身份驗證。原始帖子中有一個鏈接,用於示例項目。 – Kaf