将 JavaScript 客户端添加到 Identity Server 4 并使用用户名和密码登录
Add a JavaScript client to IdeniityServer4 & logging using username & password
我的问题陈述是:用户将登录到 IdentityServer,使用 IdentityServer 颁发的访问令牌调用 Web API,然后注销 IdentityServer。所有这些都将由浏览器中的 JavaScript 运行 驱动。
我找到的最接近的 link 是 https://docs.identityserver.io/en/latest/quickstarts/4_javascript_client.html
我要求您在回答之前先完成 link。现在,我有一个 API /connect/token,它接受用户名、密码、client_id、client_secret、范围 & grant_type & returns 和 access_token & 然后我将访问令牌用于每个其他请求作为授权承载。
如何使用 UserManager 将我的 API 与 OIDC 集成?
link 说它使用以下代码登录用户,但我无法理解它如何在不获取其凭据的情况下登录用户?
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 异步地 return 结果。 returned 用户 object 有一个配置文件 属性,其中包含用户的声明。添加此代码以检测用户是否登录到 JavaScript 应用程序:
mgr.getUser().then(function (user) {
if (user) {
log("User logged in", user.profile);
}
else {
log("User not logged in");
}
});
接下来,我们要实现登录、api、退出功能。 UserManager 提供了一个 signinRedirect 来让用户登录,以及一个 signoutRedirect 来让用户注销。我们在上面的代码中获得的用户 object 还有一个 access_token 属性 可用于对 Web API 进行身份验证。 access_token 将使用承载方案通过授权 header 传递到网络 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();
}
我正在寻找这样的东西(作为回应,经理应该包含用户 & 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);
您想要实现的目标将无法实现。 IdentityServer4 基于 OAuth2,其理念是用户不必在您的客户端应用程序中输入其凭据,而只需在授权机构的登录页面上输入即可。
mgr.signinRedirect()
将用户重定向到用户登录权限的登录页面。在整个登录过程中,您的应用程序本身不会处理用户凭据,而只会接收令牌作为结果。这是 OAuth2 的基本思想。
有了token,您仍然可以通过mgr.getUser()
函数获取暴露的用户信息
我的问题陈述是:用户将登录到 IdentityServer,使用 IdentityServer 颁发的访问令牌调用 Web API,然后注销 IdentityServer。所有这些都将由浏览器中的 JavaScript 运行 驱动。
我找到的最接近的 link 是 https://docs.identityserver.io/en/latest/quickstarts/4_javascript_client.html
我要求您在回答之前先完成 link。现在,我有一个 API /connect/token,它接受用户名、密码、client_id、client_secret、范围 & grant_type & returns 和 access_token & 然后我将访问令牌用于每个其他请求作为授权承载。
如何使用 UserManager 将我的 API 与 OIDC 集成?
link 说它使用以下代码登录用户,但我无法理解它如何在不获取其凭据的情况下登录用户?
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 异步地 return 结果。 returned 用户 object 有一个配置文件 属性,其中包含用户的声明。添加此代码以检测用户是否登录到 JavaScript 应用程序:
mgr.getUser().then(function (user) {
if (user) {
log("User logged in", user.profile);
}
else {
log("User not logged in");
}
});
接下来,我们要实现登录、api、退出功能。 UserManager 提供了一个 signinRedirect 来让用户登录,以及一个 signoutRedirect 来让用户注销。我们在上面的代码中获得的用户 object 还有一个 access_token 属性 可用于对 Web API 进行身份验证。 access_token 将使用承载方案通过授权 header 传递到网络 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();
}
我正在寻找这样的东西(作为回应,经理应该包含用户 & 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);
您想要实现的目标将无法实现。 IdentityServer4 基于 OAuth2,其理念是用户不必在您的客户端应用程序中输入其凭据,而只需在授权机构的登录页面上输入即可。
mgr.signinRedirect()
将用户重定向到用户登录权限的登录页面。在整个登录过程中,您的应用程序本身不会处理用户凭据,而只会接收令牌作为结果。这是 OAuth2 的基本思想。
有了token,您仍然可以通过mgr.getUser()
函数获取暴露的用户信息