2017-09-13 84 views
0

我將使用哪種Azure Active Directory認證流用於需要調用Microsoft Graph API並從Office 365應用啓動器啓動的單租戶Web應用程序?從Office 365啓動的用於Web App的Azure Active Directory流

Office 365使用的是與Web應用程序相同的租戶,而我正在使用Azure AD v1端點。我試過的例子對於這種情況並不適用,因爲它預計用戶不能登錄。

我試過了這個例子:https://github.com/microsoftgraph/aspnetcore-connect-sample

打算何時將應用程序直接,但點擊在Office 365應用啓動器圖標就會立即顯示出下面的錯誤它工作正常:

Exception: OpenIdConnectAuthenticationHandler: message.State is null or empty. 

是解決方案簽署用戶並重新驗證它們以獲得授權代碼以緩存,還是應該使用「代表」流代替?

+0

Hi @dallasg,當我們嘗試實現Azure AD v2(MSAL)身份驗證端點時,我們遇到了一些依賴衝突。 netcore2.0可能會解決這個問題,因此樣本將在未來幾周內更新。如果您也遇到此示例的錯誤,請提交問題:https://github.com/microsoftgraph/aspnetcore-connect-sample/issues –

回答

0

您似乎直接爲應用程序主頁的URL設置了登錄URL,而沒有使用state參數。

要解決該問題,建議您設置應用的主頁。例如,此代碼示例應爲https://localhost:44334。如果你想保護的Web應用程序,只允許進行身份驗證的用戶訪問,我們可以更換的代碼ConfigureServices方法像下面,並在Home控制器刪除AllowAnonymous屬性:

services.AddMvc(config => 
{ 
    var policy = new AuthorizationPolicyBuilder() 
        .RequireAuthenticatedUser() 
        .Build(); 
    config.Filters.Add(new AuthorizeFilter(policy)); 
}); 

之後,當您訪問應用程序通過Office 365應用程序門戶,它將首先重定向用戶登錄,然後才能訪問應用程序。

+0

我嘗試將_Authorize_屬性添加到_HomeController_,但它仍然沒有 - 驗證用戶。我認爲是因爲cookie認證中間件。 – dallasg

+0

您是否在'Home'控制器的'Index'操作中刪除了'AllowAnonymous'屬性? –

0

我能夠通過添加Microsoft Graph URI作爲OpenID Connect中間件的資源設置來解決問題。

現在,當啓動應用程序時,會發送一個授權碼,我可以將其存儲在令牌緩存中並稍後用於對Graph API進行身份驗證。