首页 > 其他分享 >orchard core 开启openid 使用uniapp结合oidc-client 作为客户端连接

orchard core 开启openid 使用uniapp结合oidc-client 作为客户端连接

时间:2024-02-20 17:26:06浏览次数:44  
标签:core oidcClient orchard openid user https console true oidc

官方的项目地址:
https://github.com/onestar1/OrchardSkills.OrchardCore.OIDC.Vue.js/tree/main/OrchardSkills.OrchardCore.MaterialDesignTheme

操作步骤:
单独 clone
https://github.com/OrchardSkills/OrchardSkills.OrchardCore.MaterialDesignTheme
1、打开 Recipes 目录下面的 materialdesign.recipe.json
"OrchardCore.OpenId.Server",
"OrchardCore.OpenId.Management",
"OrchardCore.OpenId.Validation",
打开 openid的配置
同时在尾部 增加配置 :
{
"name": "OpenIdServerSettings",
"TestingModeEnabled": false,
"AccessTokenFormat": "JsonWebToken",
"Authority": "https://localhost:44342",
"EnableTokenEndpoint": true,
"EnableAuthorizationEndpoint": true,
"EnableLogoutEndpoint": true,
"EnableUserInfoEndpoint": true,
"AllowPasswordFlow": true,
"AllowClientCredentialsFlow": true,
"AllowAuthorizationCodeFlow": true,
"AllowRefreshTokenFlow": true,
"AllowImplicitFlow": false,
"AllowLogoutEndpoint": true,
"AuthorizationEndpointPath": "https://localhost:44342/connect/authorize",
"LogoutEndpointPath": "https://localhost:44342/connect/logout",
"TokenEndpointPath": "https://localhost:44342/connect/token",
"UserinfoEndpointPath": "https://localhost:44342/connect/userinfo"
},
{
"DisplayName": "Authorization Code Flow",
"name": "OpenIdApplication",
"ClientId": "code_flow_client_id",
"RedirectUris": "https://localhost:5002/signin-callback",
"PostLogoutRedirectUris": "https://localhost:5002/signout-callback",
"AllowAuthorizationCodeFlow": true,
"AllowLogoutEndpoint": true,
"Type": "public"
},
{
"name": "OpenIdScope",
"Description": "A scope to provide api for remote clients",
"DisplayName": "api Scope",
"ScopeName": "api",
"Resources": "my_recipient"
},
{
"name": "OpenIdValidationSettings",
"Audience": "my_recipient",
"Authority": "https://localhost:44342"
}

也可以在 程序运行的时候 使用后台ui进行添加配置
2、 开始安装对应的 view 跟vue
cmd到根目录
npm install -g @vue/cli

vue create vuex-oidc

cd vuex-oidc

npm install axios --save

//安装字体
npm install @fortawesome

接下去就是 使用uniapp oidc-client 对接

新建一个uniapp 的默认项目 , 然后安装 oidc-client
安装 axios

也可以直接从 刚才安装的目录下面 拷贝 这两个node_modules

main.js 添加
主要是导入 oidc 设置为全局调用的属性。
vue3的写法是 :
`import Vue from 'vue'
import App from './App'
import Oidc from '@/services/authService.js'

Vue.config.productionTip = false

App.mpType = 'app'
//vue2
Vue.prototype.$oidc = new Oidc()
//vue3
//Vue.config.globalProperties.$oidc = new Oidc()
const app = new Vue({
...App
})
app.$mount()
添加oidc的配置文件 config.js
export const clientRoot = 'http://localhost:8081/'
export const stsAuthority = 'https://localhost:7278/'
export const clientId = 'code_flow_client_id'
export const scope = 'myapp'
export const responseType = 'code'
然后整合oidc的 登录跟注销方法 authService.js/* eslint-disable */
import Oidc from 'oidc-client';
// import 'babel-polyfill';
import {
clientRoot,
stsAuthority,
clientId,
scope,
responseType
} from '../config/config'

var oidcClient = new Oidc.UserManager({
userStore: new Oidc.WebStorageStateStore(),
authority: stsAuthority,
client_id: clientId,
redirect_uri: clientRoot + 'pages/SignInCallBack',
response_type: responseType,
scope: scope,
post_logout_redirect_uri: clientRoot + 'pages/SignOutCallBack',
filterProtocolClaims: true,
loadUserInfo: true
})

Oidc.Log.logger = console;
Oidc.Log.level = Oidc.Log.INFO;

oidcClient.events.addUserLoaded(function (user) {
console.log('New User Loaded:', arguments);
console.log('Acess_token: ', user.access_token)
});

oidcClient.events.addAccessTokenExpiring(function () {
console.log('AccessToken Expiring:', arguments);
});

oidcClient.events.addAccessTokenExpired(function () {
console.log('AccessToken Expired:', arguments);
//alert('Session expired. Going out!');
oidcClient.signoutRedirect().then(function (resp) {
console.log('signed out', resp);
}).catch(function (err) {
console.log(err)
})
});

oidcClient.events.addSilentRenewError(function () {
console.error('Silent Renew Error:', arguments);
});

oidcClient.events.addUserSignedOut(function () {
//alert('Going out!');
console.log('UserSignedOut:', arguments);
oidcClient.signoutRedirect().then(function (resp) {
console.log('signed out', resp);
}).catch(function (err) {
console.log(err)
})
});

export default class SecurityService {

login() {
    return oidcClient.signinRedirect(); // Returns promise to trigger a redirect of the current window to the authorization endpoint.
  }

  async isLoggedIn() {
    const user = await oidcClient.getUser();
    const userCurrent = !!user && !user.expired;

    return userCurrent;
  }

  async completeLogin() {
    const user = await oidcClient.signinRedirectCallback() // Returns promise to process response from the authorization endpoint. The result of the promise is the authenticated User
      ;
   
    return user;
  }

  logout() {
    oidcClient.signoutRedirect(); // Returns promise to trigger a redirect of the current window to the end session endpoint.
  }

  completeLogout() {

   
    return oidcClient.signoutRedirectCallback(); // Returns promise to process response from the end session endpoint.
  }

  async getAccessToken() {
    const user = await oidcClient.getUser(); // Returns promise to load the User object for the currently authenticated user.
    return !!user && !user.expired ? user.access_token : null
  }

}

`

最后vue页面内容
分别是 一个主页面 、设置两个组件 登录跟注销跳转 ,一个 展示页面
oidc-demo.vue
` `

SignInCallBack.vue
`

`

SignOutCallBack.vue

`

`

home.vue
`

`

效果如下:


主要 注意 grahiQL 是跟正常的sql语句差不多。 前期要有对应的类型存在, 可以直接导入配方(materialdesign.recipe.json)

这样就相当于对接了 orchad core的 信任登录了。非常顺滑。
继承到自己原本的项目中,就可以实现数据整合了。
这样把授权的用户信息 同步到自己的项目。 就可以实现数据同步

可以直接到我的的github 项目 查看完整代码
https://github.com/onestar1/oidc-client

标签:core,oidcClient,orchard,openid,user,https,console,true,oidc
From: https://www.cnblogs.com/zxs-onestar/p/18023162

相关文章

  • .Net Core框架容器依赖注入的生命周期
    一.前言框架中依赖注入容器包括了三种生命周期,Singleton、Scoped和Transient。Singleton是全局实例,它存储到根容器上,从任何容器解析都会得到全局唯一的实例。Transient是瞬时实例,它不会存储到容器上,从任何容器解析都会重新实例化一个新的对象。Scoped是域内实......
  • .net core微服务之服务发现
    一:nacoshttps://nacos.io/docs/latest/what-is-nacos/https://github.com/alibaba/nacos二:consulhttps://developer.hashicorp.com/consul/docs?product_intent=consulhttps://github.com/hashicorp/consul服务发现的框架常用的还有zookeepereureka等,这里......
  • 学习总结基于VUE+ASP.NET Core mvc+EFCore+Axios.js+ehcart.js开发一个web应用
    Vue是一个用于构建用户界面(基于数据渲染出用户看到的页面)的渐进式(循序渐进)框架。分为(声明式渲染,基于js包、组建系统、客户端路由、大规模状态管理和构建工具)Vue的使用方法分为:1.Vue核心包开发:局部模块改造;2.Vue核心包+Vue插件工程化开发:整站开发1.开始之前准备下述包 在prog......
  • .net core微服务之网关
    网关:一:apisixdoc:https://apisix.apache.org/zh/docs/apisix/getting-started/README/github:https://github.com/apache/apisix二:Konggithub:https://github.com/Kong/kong三:Ocelotgithub:https://github.com/ThreeMammals/Ocelot四:janusgithub:https://......
  • 二机制安装Kubernetes 1.29 高可用集群(6)--calico网络组件和CoreDNS配置
    1.部署Calico网络组件1.1k8s-master节点上下载calico的创建文件下载地址:https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstartwgethttps://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/tigera-operator.yamlwgethttps://ra......
  • 从零开始的 dbt 入门教程 (dbt core 开发进阶篇)
    引在上一篇文章中,我们花了专门的篇幅介绍了dbt更多实用的命令,那么我们继续按照之前的约定来聊dbt中你可能会遇到的疑惑以及有用的概念,如果你是dbt初学者,我相信如下知识点一定会对你有极大的帮助:了解dbt_project配置文件,以及不同字符的作用了解dbt工程化,为dev以及......
  • 1.m个人的成绩存放在score数组中,请编写函数fun, 它的功能是:将低于平均分的人数作为函
    /1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指1定的数组中。/#include<stdio.h>#include<string.h>intfun(int*buf,int*buff,intnum){inti=0,j=0,sum=0;for(i=......
  • .NET 8 中的 ASP.NET Core 指标与 Grafana 仪表板入门
    .NET8中的ASP.NETCore指标与Grafana仪表板入门原文地址:https://devblogs.microsoft.com/dotnet/introducing-aspnetcore-metrics-and-grafana-dashboards-in-dotnet-8/指标数据报告关于你的应用的诊断信息。.NET8为ASP.NETCore增加了超过一打的有价值的指标数据:HT......
  • Asp.Net Core访问阿里云MongoDB云数据库
    Asp.NetCore访问阿里云MongoDB云数据库选择.NetCore技术栈开发跨平台软件解决方案,投入少,产出快,有助于企业内部降本增效。MongoDB的实体类增加字段不用迁移数据库,适合需求经常变化的应用场景。如果是企业内部小型应用,拉一个MongoDB容器即可,如果要进一步考虑多节点冗余,高可用,异地......
  • ASP.NET Core 开发者指南
    1简介我个人整理了ASP.NETCore开发者路线图目录,并在学习过程中的整理了一些读书笔记、学习心得等资料,希望与大家共同进步。2目录2.1C#委托,事件和Lambda表达式异步编程(或多线程编程)2.2一般开发技能Git:高效团队协作的利器使用GitHub进行协作开发的综合介绍2.3数......