簡體   English   中英

從 Microsoft Identity Platform 獲取刷新令牌

[英]Getting refresh token from Microsoft Identity Platform

我有一個 Azure Web 應用程序,我希望用戶可以在其中登錄 Microsoft (Azure AD)。 我需要獲取刷新令牌。 我已經查看了使用在后台靜默刷新令牌的庫的示例,但是對於我的設計,我需要掌握刷新令牌本身。

這是否可以通過高級身份驗證庫(OpenID Connect?)來實現,如果可以,如何實現? 對於手動方法,在此處進行了描述: https : //docs.microsoft.com/en-us/graph/auth-v2-user在 ASP.NET 或 .NET Core 中是否有任何示例代碼或教程?

首先,我建議使用MSAL ,它維護令牌緩存並在令牌即將到期時為您刷新令牌。 您不需要自己處理令牌過期。

如果要保留刷新令牌,可以在注冊 OIDC 中間件時將SaveTokens屬性設置為 true,以便將令牌保存到 cookie 中。 我假設您正在使用Microsoft.AspNetCore.Authentication.AzureAD.UI庫:

services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
    .AddAzureAD(options => Configuration.Bind("AzureAd", options));

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Authority = options.Authority + "/v2.0/";
    options.SaveTokens = true;


});

然后您可以訪問控制器中的令牌,例如:

var refreshToken = await HttpContext.GetTokenAsync("refresh_token");
var idToken = await HttpContext.GetTokenAsync("id_token");

更新:

那是因為您沒有正確獲得刷新令牌。 對於測試,您可以使用代碼流並添加 OIDC 的offline_access范圍:

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Authority = options.Authority + "/v2.0/";
    options.SaveTokens = true;
    options.ResponseType = "code";
    options.ClientSecret = "xxxxxx";
    options.Scope.Add("offline_access");
    options.TokenValidationParameters.ValidateIssuer = false;

});

ClientSecret替換為您在 Azure 門戶中配置的那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM