bir istemci uygulama nesnesi derledikten sonra, web API'sini çağırmak için kullanabileceğiniz bir belirteç almak için bunu kullanın.
Microsoft.Identity.Web , Microsoft Graph veya aşağı akış web API'sini çağırmak için kolaylık hizmetleri sağlayan uzantı yöntemleri ekler. Bu yöntemler, web API'lerini çağıran bir web uygulamasında ayrıntılı olarak açıklanmıştır: API çağırma. Bu yardımcı yöntemlerle, el ile belirteç almanız gerekmez.
Bununla birlikte, el ile belirteç almak istiyorsanız, aşağıdaki kod bir ev denetleyicisinde bunu yapmak için Microsoft.Identity.Web kullanma örneğini gösterir. REST API'yi (Microsoft Graph SDK'sı yerine) kullanarak Microsoft Graph'ı çağırır. Genellikle belirteç almanız gerekmez, isteğinize eklediğiniz bir Yetkilendirme üst bilgisi oluşturmanız gerekir. Yetkilendirme üst bilgisi almak için, hizmeti denetleyicinizin oluşturucusunda bağımlılık ekleme yoluyla (veya Blazor kullanıyorsanız sayfa oluşturucunuza) eklersiniz IAuthorizationHeaderProvider
ve denetleyici eylemlerinizde kullanırsınız. Bu arabirim, protokolü (Taşıyıcı, Pop, ...) ve belirteci içeren bir dize oluşturan yöntemlere sahiptir. Kullanıcı adına api çağırmak üzere bir yetkilendirme üst bilgisi almak için (CreateAuthorizationHeaderForUserAsync
kullanın. Uygulamanın kendisi adına aşağı akış API'sini çağırmak üzere bir yetkilendirme üst bilgisi almak için, bir daemon senaryosunda (CreateAuthorizationHeaderForAppAsync
kullanın.
Denetleyici yöntemleri, web API'sini yalnızca kimliği doğrulanmış çağrıların kullanabilmesini sağlayan bir [Authorize]
öznitelikle korunur.
[Authorize]
public class MyApiController : Controller
{
/// <summary>
/// The web API will accept only tokens 1) for users, 2) that have the `access_as_user` scope for
/// this API.
/// </summary>
static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };
static readonly string[] scopesToAccessDownstreamApi = new string[] { "api://MyTodolistService/access_as_user" };
readonly IAuthorizationHeaderProvider authorizationHeaderProvider;
public MyApiController(IAuthorizationHeaderProvider authorizationHeaderProvider)
{
this.authorizationHeaderProvider = authorizationHeaderProvider;
}
[RequiredScopes(Scopes = scopesToAccessDownstreamApi)]
public IActionResult Index()
{
// Get an authorization header.
IAuthorizationHeaderProvider authorizationHeaderProvider = this.GetAuthorizationHeaderProvider();
string[] scopes = new string[]{"user.read"};
string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);
return await callTodoListService(authorizationHeader);
}
}
Yöntemi hakkında callTodoListService
ayrıntılı bilgi için bkz . Web API'lerini çağıran bir web API'si: API çağırma.
ASP.NET kodu, ASP.NET Core için gösterilen koda benzer:
- [Authorize] özniteliğiyle korunan denetleyici eylemi, denetleyici üyesinin
ClaimsPrincipal
kiracı kimliğini ve kullanıcı kimliğini ayıklar. (ASP.NET kullanır HttpContext.User
.) Microsoft.Identity.Web.OWIN , Denetleyiciye Microsoft Graph veya aşağı akış web API'sini çağırmak, yetkilendirme üst bilgisi ve hatta belirteç almak için kolaylık hizmetleri sağlayan uzantı yöntemleri ekler. Bir API'yi doğrudan çağırmak için kullanılan yöntemler, web API'lerini çağıran bir web uygulamasında ayrıntılı olarak açıklanmıştır: API çağırma. Bu yardımcı yöntemlerle, el ile belirteç almanız gerekmez.
Bununla birlikte, bir belirteci el ile almak veya yetkilendirme üst bilgisi oluşturmak istiyorsanız, aşağıdaki kod bir denetleyicide bunu yapmak için Microsoft.Identity.Web'in nasıl kullanılacağını gösterir. Microsoft Graph SDK'sı yerine REST API'yi kullanarak bir API (Microsoft Graph) çağırır.
Yetkilendirme üst bilgisi almak için uzantı yöntemini GetAuthorizationHeaderProvider
kullanarak denetleyiciden bir hizmet alırsınızIAuthorizationHeaderProvider
. Kullanıcı adına api çağırmak üzere bir yetkilendirme üst bilgisi almak için (CreateAuthorizationHeaderForUserAsync
kullanın. Uygulamanın kendisi adına aşağı akış API'sini çağırmak üzere bir yetkilendirme üst bilgisi almak için, bir daemon senaryosunda (CreateAuthorizationHeaderForAppAsync
kullanın.
Denetleyici yöntemleri, web uygulamasını yalnızca kimliği doğrulanmış kullanıcıların kullanabilmesini sağlayan bir [Authorize]
öznitelikle korunur.
Aşağıdaki kod parçacığı, Microsoft Graph'i REST API olarak çağırmak için bir yetkilendirme üst bilgisi alan eylemini HomeController
gösterir:
[Authorize]
public class MyApiController : Controller
{
[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public async Task<IActionResult> Profile()
{
// Get an authorization header.
IAuthorizationHeaderProvider authorizationHeaderProvider = this.GetAuthorizationHeaderProvider();
string[] scopes = new string[]{"user.read"};
string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);
// Use the access token to call a protected web API.
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", authorizationHeader);
string json = await client.GetStringAsync(url);
}
}
Aşağıdaki kod parçacığı, Microsoft Graph'i REST API olarak çağırmak için bir erişim belirteci alan eylemini MyApiController
gösterir:
[Authorize]
public class HomeController : Controller
{
[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public async Task<IActionResult> Profile()
{
// Get an authorization header.
ITokenAcquirer tokenAcquirer = TokenAcquirerFactory.GetDefaultInstance().GetTokenAcquirer();
string[] scopes = new string[]{"user.read"};
string token = await await tokenAcquirer.GetTokenForUserAsync(scopes);
// Use the access token to call a protected web API.
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
string json = await client.GetStringAsync(url);
}
}
Burada, API denetleyicilerinin eylemlerinde çağrılan bir kod örneği verilmiştir. Aşağı akış API'sini çağırır - Microsoft Graph.
@RestController
public class ApiController {
@Autowired
MsalAuthHelper msalAuthHelper;
@RequestMapping("/graphMeApi")
public String graphMeApi() throws MalformedURLException {
String oboAccessToken = msalAuthHelper.getOboToken("https://graph.microsoft.com/.default");
return callMicrosoftGraphMeEndpoint(oboAccessToken);
}
}
Python web API'sinde istemciden alınan taşıyıcı belirteci doğrulamak için ara yazılım kullanılması gerekir. Web API'si daha sonra yöntemini çağırarak MSAL Python kitaplığını kullanarak aşağı akış API'sinin erişim belirtecini acquire_token_on_behalf_of
alabilir.
Aşağıda, yöntemini ve Flask çerçevesini acquire_token_on_behalf_of
kullanarak erişim belirteci alan bir kod örneği verilmiştir. Aşağı akış API'sini çağırır: Azure Yönetim Abonelikleri uç noktası.
def get(self):
_scopes = ["https://management.azure.com/user_impersonation"]
_azure_management_subscriptions_uri = "https://management.azure.com/subscriptions?api-version=2020-01-01"
current_access_token = request.headers.get("Authorization", None)
#This example only uses the default memory token cache and should not be used for production
msal_client = msal.ConfidentialClientApplication(
client_id=os.environ.get("CLIENT_ID"),
authority=os.environ.get("AUTHORITY"),
client_credential=os.environ.get("CLIENT_SECRET"))
#acquire token on behalf of the user that called this API
arm_resource_access_token = msal_client.acquire_token_on_behalf_of(
user_assertion=current_access_token.split(' ')[1],
scopes=_scopes
)
headers = {'Authorization': arm_resource_access_token['token_type'] + ' ' + arm_resource_access_token['access_token']}
subscriptions_list = req.get(_azure_management_subscriptions_uri), headers=headers).json()
return jsonify(subscriptions_list)
(Gelişmiş) Arka plan uygulamaları, API'ler ve hizmetlerden oturum açmış kullanıcının belirteç önbelleğine erişme
Arka plan uygulamalarının, API'lerinin ve hizmetlerinin yokluklarında kullanıcılar adına işlem yapmaya devam etmek için erişim belirteci önbelleğini kullanmasına izin vermek için MSAL'nin belirteç önbelleği uygulamasını kullanabilirsiniz. Bunu yapmak özellikle arka plan uygulamalarının ve hizmetlerinin, kullanıcı ön uç web uygulamasından çıktıktan sonra kullanıcı adına çalışmaya devam etmesi gerekiyorsa yararlıdır.
Günümüzde çoğu arka plan işlemi, kimlik doğrulaması veya yeniden kimlik doğrulaması için mevcut olmadan kullanıcının verileriyle çalışması gerektiğinde uygulama izinlerini kullanır. Uygulama izinleri genellikle ayrıcalıkların yükseltilmesini gerektiren yönetici onayı gerektirdiğinden, geliştirici kullanıcının uygulaması için başlangıçta onayladığı izinlerin ötesinde bir izin almayı amaçlamadığı için gereksiz uyuşmalarla karşılaşılır.
GitHub'da bu kod örneği, MSAL'nin belirteç önbelleğine arka plan uygulamalarından erişerek bu gereksiz sürtüşmelerin nasıl önlendiğini gösterir:
Arka plan uygulamalarından, API'lerden ve hizmetlerden oturum açmış kullanıcının belirteç önbelleğine erişme