我的问题陈述是:用户将登录到 IdentityServer,使用 IdentityServer 发出的访问令牌调用 Web API,然后注销 IdentityServer。所有这些都将由在浏览器中运行的 JavaScript 驱动。
我找到的最接近的链接是https://docs.identityserver.io/en/latest/quickstarts/4_javascript_client.html
我要求您在回答之前通过链接。现在,我有一个 API /connect/token,它接受用户名、密码、client_id、client_secret、scope 和 grant_type 并返回一个 access_token 然后我将该访问令牌用于其他所有请求作为授权承载。
如何使用 UserManager 将我的 API 与 OIDC 集成?
该链接表示它使用以下代码登录用户,但我无法理解它如何在不获取其凭据的情况下登录用户?
var config = {
authority: "https://localhost:5001",
client_id: "js",
redirect_uri: "https://localhost:5003/callback.html",
response_type: "code",
scope:"openid profile api1",
post_logout_redirect_uri : "https://localhost:5003/index.html",
};
var mgr = new Oidc.UserManager(config);
接下来,UserManager 提供了一个 getUser API 来了解用户是否登录到 JavaScript 应用程序。它使用 JavaScript Promise 异步返回结果。返回的 User 对象有一个 profile 属性,其中包含用户的声明。添加此代码以检测用户是否登录到 JavaScript 应用程序:
mgr.getUser().then(function (user) {
if (user) {
log("User logged in", user.profile);
}
else {
log("User not logged in");
}
});
接下来,我们要实现登录、api 和注销功能。UserManager 提供了一个 signinRedirect 来让用户登录,以及一个 signoutRedirect 来让用户注销。我们在上述代码中获得的 User 对象还有一个 access_token 属性,可用于对 Web API 进行身份验证。access_token 将通过带有承载方案的授权标头传递给 Web API。添加此代码以在我们的应用程序中实现这三个功能:
function login() {
mgr.signinRedirect();
}
function api() {
mgr.getUser().then(function (user) {
var url = "https://localhost:6001/identity";
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onload = function () {
log(xhr.status, JSON.parse(xhr.responseText));
}
xhr.setRequestHeader("Authorization", "Bearer " + user.access_token);
xhr.send();
});
}
function logout() {
mgr.signoutRedirect();
}
我正在寻找这样的东西(作为响应,mgr 应该包含用户和 access_token):
var config = {
authority: "https://localhost:5001/connect/token",
**username: "Username",
password: "Password",**
client_id: "js",
redirect_uri: "https://localhost:5003/callback.html",
response_type: "code",
scope:"openid profile api1",
post_logout_redirect_uri : "https://localhost:5003/index.html",
};
var mgr = new Oidc.UserManager(config);