我要求允许我们的内部支持用户冒充我们的客户用户.
我目前正在使用IdentityServer4,Implicit Flow和OIDC Client.
迄今为止找到的资源.
鉴于在线资源有限,我是否可以/应该使用IdentityServer4实施模拟?
impersonation asp.net-core identityserver4 implicit-flow oidc-client-js
我正在与身份服务器4一起为企业架构中的不同应用提供身份服务。
使用oidc-client.js在身份服务器4应用程序中使用隐式流注册了SPA应用程序,并且正在运行。
但是问题在于令牌更新,需要长时间保留用户登录名而又不要求用户再次登录。
为此,请使用以下配置实施静默令牌续订。
var config = {
authority: "http://localhost:5000",
client_id: "jswebclient",
redirect_uri: "http://localhost:5003/callback.html",
response_type: "id_token token",
scope: "openid profile api1",
post_logout_redirect_uri: "http://localhost:5003/loggedout.html",
automaticSilentRenew: true,
silent_redirect_uri : "http://localhost:5003/callback.html" };
Run Code Online (Sandbox Code Playgroud)
var mgr = new Oidc.UserManager(config);
使用上述配置时,会发生自动续订,但没有按预期进行静默续订,正在发生将页面重定向到重定向uri的完整页面,以处理来自身份服务器的响应。
例如:index.html是我的实际页面,在其中进行静默更新,而callback.html是重定向uri,index.html重定向到callback.html,然后更新,然后重定向回到index.html,并附有实际的网络日志下面,
任何人都可以帮助我解决问题以使更新无声发生吗?
我目前正在移动应用中使用OpenID Connect/Oauth2 Implicit Flow.我正在为用户提供Web视图以登录并获取访问令牌和到期日期.但是,当访问令牌过期时,是否需要让用户再次登录?或者有没有办法使用当前的方式静默获取新的访问令牌,而不会窃听用户.我想另一个选择是将令牌到期设置为很长时间,但我已经读到这是一个坏主意.
我在这里错过了什么吗?
我目前有一个Angular 2 SPA调用Web API。我正在使用使用Identity Server 3和 oidc-client-js javascript 库实现的安全令牌服务来提供使用 Web API 的身份验证和授权。
该协议是使用隐式流的OpenId Connect。
我根据这篇文章实现了静默令牌刷新。这是为了在调用 API 时始终拥有当前的 Access_Token。
为了在一段时间不活动后注销用户,我使用 JavaScript 计时器从 Oidc_Client_Js 库调用UserManager.signoutRedirect方法。
这是可行的,但我担心这可能会受到操纵,因为用户的会话是由客户端上的 Javascript 控制的。
我的问题是,是否有任何推荐的技术可以在使用 OpenId Connect 保护的单页应用程序上应用“滚动”自动注销?
我已在 Azure 中为 Microsoft Identity 平台注册了一个应用程序。我将其配置为允许 MS 帐户(例如 Outlook.com),并且基本上已经完成了此处和此处的一些在线快速入门中的所有操作(“向您的 Web 应用程序添加凭据”除外)。我还选中了启用隐式流的框。
我将我的 React 应用程序重定向到要登录的 URL(使用隐式流程),我可以输入我的用户名,但随后我看到
未授权客户端:客户端不存在或未为消费者启用。如果您是应用程序开发人员,请通过https://go.microsoft.com/fwlink/?linkid=2083908 上的 Azure 门户中的应用程序注册配置新应用程序
就像我上面提到的那样,我已经经历了几个快速入门并在此处阅读了隐式流程,并在我的代码中遵循了他们的示例。
我也尝试删除应用程序注册并重新开始。没运气。
将浏览器重定向到一个 Url 的 JS 代码,该 URL 看起来像 Microsoft 在其隐式流程页面上的第一个示例
goSignIn() {
const tenant = 'common'; // (for us with MS accounts)
const clientId = '*****';
const redir = encodeURIComponent('http://localhost:3000/signin');
const nonce = Math.round(Math.random() * 10000, 0);
const uriTemplate = 'https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?client_id={clientId}&response_type=id_token+token&redirect_uri={redirect}&scope=openid&response_mode=fragment&state={state}&nonce={nonce}';
const filledTemplate = uriTemplate …Run Code Online (Sandbox Code Playgroud) azure azure-active-directory implicit-flow microsoft-identity-platform
我的理解是 - oidc-client生成随机数和状态并将其发送到授权服务器(身份服务器 4)。这是用来防止CSRF攻击、重放攻击的。
状态和随机数通过下面的signinredirect()示例示例发送
https://auth.azurewebsites.net/Account/Login?
ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3F
client_id%3DLocal%26
redirect_uri%3Dhttp%253A%252F%252Flocalhost%253A4200%252Fauth-callback%252F%26
response_type%3Did_token%2520token%26
scope%3Dopenid%2520profile%2520Api%26
state%3D212ee56661074896aea2b6043d2b8a3f%26
nonce%3D393838b342d543d5910f38cbcab22fa0%26
loginType%3DInternal // my extra params
Run Code Online (Sandbox Code Playgroud)
问题 1 - 回调后状态未定义
状态添加到回调 URL 中,如下所示
http://localhost:4200/auth-callback#id_token=eyJhbG...
token_type=Bearer
&expires_in=300&
scope=openid%20profile%20Api&
state=155e3e4352814ca48e127547c134144e&
session_state=DPXW-ijMR4ST9iTSxgMwhsLq7aoknEZOnq3aFDooCFg.ifImJurwkwU6M5lwZXCUuw
Run Code Online (Sandbox Code Playgroud)
状态必须存在于用户中。但就我而言,我在回调方法中看到状态未定义
async completeAuthentication() {
await this.manager
.signinRedirectCallback()
.then(x => {
this.user = x;
this.user.state = x.state; // undefined
this.user.session_state = x.session_state;
})
.catch(errorData => {
const expired = errorData;
});
Run Code Online (Sandbox Code Playgroud)
问题 -
问题 2 - 随机数
id_token 中收到随机数值
created: 1594171097 …Run Code Online (Sandbox Code Playgroud) 根据我的理解,授权代码流相对于隐式流的优势在于,使用 ACF,访问令牌将发送到服务器端应用程序而不是浏览器应用程序。这使得访问令牌更难被窃取,因为访问令牌永远不会到达浏览器(因此不易受到跨站点脚本攻击)。
我本以为 PKCE 会尝试解决这个问题。但事实并非如此。访问令牌仍然发送到浏览器。因此它仍然可以被盗。
我在这里缺少什么吗?非常感谢。
如何保留用户导航到的原始URL?说我有一个未经身份验证的用户导航到http:// localhost:9000 / customer / 123
要验证用户身份,我将执行以下操作:
// in my app.js
new Oidc.UserManager().signinRedirect({state:'customer/123'}); // need a way to keep this url
Run Code Online (Sandbox Code Playgroud)
当返回到callback.html时,我需要一种访问原始URL的方法:
// callback.html
<script src="oidc-client.js"></script>
<script>
Oidc.Log.logger = console;
new Oidc.UserManager().signinRedirectCallback().then(function () {
var state = 'customer/123' // how to do a redirect to the page originally requested page?
window.location.href="http://localhost:9000/ + state
}).catch(function (e) {
console.error(e);
});
</script>
Run Code Online (Sandbox Code Playgroud)
或者,也许还有其他获取原始网址的方式?
谢谢你的帮助!
oauth-2.0 ×3
angular ×2
access-token ×1
asp.net-core ×1
azure ×1
csrf ×1
keycloak ×1
logout ×1
microsoft-identity-platform ×1
pkce ×1