Setelah Anda membangun objek aplikasi klien, gunakan itu untuk memperoleh token yang dapat Anda gunakan guna memanggil API web.
Microsoft.Identity.Web menambahkan metode ekstensi yang menyediakan layanan kemudahan untuk memanggil Microsoft Graph atau API web downstream. Metode ini dijelaskan secara terperinci di API web yang memanggil API web: Panggil API. Dengan metode pembantu ini, Anda tidak perlu memperoleh token secara manual.
Namun, jika Anda ingin memperoleh token secara manual, kode berikut menunjukkan contoh penggunaan Microsoft.Identity.Web untuk melakukannya di pengontrol API. Ini memanggil API downstream bernama todolist.
Untuk mendapat token guna memanggil API downstream, Anda memasukkan layanan ITokenAcquisition dengan injeksi dependensi di konstruktor pengontrol Anda (atau konstruktor halaman jika menggunakan Blazor), dan menggunakannya dalam tindakan pengontrol Anda, mendapatkan token untuk pengguna (GetAccessTokenForUserAsync) atau untuk aplikasi itu sendiri (GetAccessTokenForAppAsync) dalam skenario daemon.
[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" };
private readonly ITokenAcquisition _tokenAcquisition;
public MyApiController(ITokenAcquisition tokenAcquisition)
{
_tokenAcquisition = tokenAcquisition;
}
public IActionResult Index()
{
HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);
string accessToken = _tokenAcquisition.GetAccessTokenForUserAsync(scopesToAccessDownstreamApi);
return await callTodoListService(accessToken);
}
}
Untuk detail tentang metode callTodoListService, lihat API web yang memanggil API web: Memanggil API.
Berikut adalah contoh kode yang dipanggil dalam tindakan pengontrol API. Kode memanggil API downstream - 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);
}
}
API web Python harus menggunakan beberapa middleware untuk memvalidasi token pembawa yang diterima dari klien. API web lalu dapat memperoleh token akses untuk API downstream menggunakan pustaka Python MSAL dengan memanggil metode acquire_token_on_behalf_of.
Berikut adalah contoh kode yang memperoleh token akses menggunakan metode acquire_token_on_behalf_of dan kerangka kerja Flask. Hal ini memanggil API downstream - titik akhir Langganan Manajemen Microsoft Azure.
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)
(Tingkat lanjut) Mengakses cache token pengguna yang masuk dari aplikasi, API, dan layanan latar belakang
Anda dapat menggunakan implementasi cache token MSAL untuk memungkinkan aplikasi latar belakang, API, dan layanan menggunakan cache token akses untuk terus bertindak atas nama pengguna saat mereka tidak ada. Melakukan implementasi tersebut sangat berguna jika aplikasi dan layanan latar belakang perlu terus bekerja atas nama pengguna setelah pengguna keluar dari aplikasi web front-end.
Saat ini, sebagian besar proses latar belakang menggunakan izin aplikasi ketika mereka perlu bekerja dengan data pengguna tanpa mereka hadir untuk mengautentikasi atau mengotorisasi ulang. Karena izin aplikasi sering kali memerlukan izin admin, yang memerlukan peningkatan hak istimewa, gesekan yang tidak perlu terjadi karena pengembang tidak bermaksud untuk mendapatkan izin di luar izin yang awalnya disetujui pengguna untuk aplikasi mereka.
Contoh kode pada GitHub ini menunjukkan cara menghindari gesekan yang tidak perlu ini dengan mengakses cache token MSAL dari aplikasi latar belakang:
Mengakses cache token pengguna yang masuk dari aplikasi latar belakang, API, dan layanan